颜色对话框:
可以用javax.swing包中的JColorChooser类的静态方法
public staticColorshowDialog (Component
component, String title,
Color initialColor)
创建一个有模式的颜色对话框,其中参数component指定颜色对话框可见时的位置,颜色对话框在参数component指定的组件的正前方显示出来,如果
component为null,颜色对话框在屏幕的正前方显示出来。
title指定对话框的标题,initialColor指定颜色对话框返回的初始台调色板颜色。
用户通过颜色对话框选择颜色后,如果单击“确定”按钮,那么颜色对话框将消失,showDialog()方法返回对话框所选择的颜色对象。如果单击“ 撤销”按钮或关闭图标,那预览样品文本样品文本颜色对话框将消失,showDialog0方 法返回null.
在下面的例子19中,当用户单击按钮时,弹出一个颜色对话框,然后根据用户选择的颜色来改变窗口的颜色。程序中颜色对话框的运行效果如图9.19所示。
public class Example9_19 {
public static void main(String args[]) {
WindowColor win=new WindowColor();
win.setTitle("带颜色对话框的窗口");
win.setBounds(80,90,500,500);
}
}
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class WindowColor extends JFrame implements ActionListener {
JButton button;
WindowColor() {
button=new JButton("打开颜色对话框");
button.addActionListener(this);
setLayout(new FlowLayout());
add(button);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
Color newColor=JColorChooser.showDialog(this,"调色板",getContentPane().getBackground());
if(newColor!=null) {
getContentPane().setBackground(newColor);
}
}
}
自定义对话框:
创建对话框与创建窗口类似,通过建立JDialog的子类来建立一个对话框类,然后这个类的一个实例,即这个子类创建的一一个对象,就是-个对话框。
对话框是一个容器,它的默认布局是BorderLayout,对话框可以添加组件,
实现与用户的交互操作。需要注意的是,对话框可见时,默认地被系统添加到显示器屏幕上,因此不允许将一个对话框添加到另-一个容器中。以下是构造对话框的两个常用构造方法。
●JDialog0构造-.个无标题的初始不可见的对话框,对话框依赖一个默认的不可见的窗口,该窗口由Java运行环境提供。
●JDialog(JFrame owner) 构造一 个无标题的初始不可见的无模式的对话框,owner是对话框所依赖的窗口,如果owner取null,对话框依赖一个默认的不可见的输入窗口的新标题窗口,该窗口由Java运行环境提供。
下面的使用自定义对话框更改窗口的标题
public class Example9_20 {
public static void main(String args[]) {
MyWindow win=new MyWindow();
win.setTitle("带自定义对话框的窗口");
win.setSize(620,360);
}
}
import java.awt.*;
import javax.swing.*;
import java.util.Arrays;
public class MyWindow extends JFrame {
JButton button;
JTextArea showRedBall ;//存放红球号码
int [] redNumber;
MyWindow() {
init();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init() {
button=new JButton("得到双色球彩票的一组红球");
showRedBall = new JTextArea(10,20);
showRedBall.setForeground(Color.red);
this.setLayout(new FlowLayout());
this.add(button);
this.add(showRedBall);
showRedBall.setLineWrap(true);
//add(button,BorderLayout.NORTH);
//add(new JScrollPane(showRedBall),BorderLayout.CENTER);
button.addActionListener((e)->{
redNumber = MyDialog.showRandomArrayDiolog
(this,"红球号码","双色球对话框",MyDialog.YES_NO_OPTION,33,6);
if(redNumber!=null) {
Arrays.sort(redNumber);
showRedBall.append(Arrays.toString(redNumber)+"\n");
}
});
Font f = new Font("",Font.BOLD,28);
SetFont.setFont(f,button,showRedBall);
}
}
import java.awt.*;
import javax.swing.*;
import java.util.Random;
import java.util.Arrays;
public class MyDialog {
public static final int YES_NO_OPTION = 1;
static int backNumber[] = null; //该返回的数组
public static int[] showRandomArrayDiolog
(Component parentComponent,String message,String title,int optionType,int max,int amount){
JDialog dialog = new JDialog((JFrame)parentComponent);
dialog.setModal(true);
dialog.setTitle(title);
JLabel mess = new JLabel(message);
JTextField showArray = new JTextField(20);//显示得到的一组随机数
int [] arraysNumber = getRandomNumber(max,amount);
showArray.setText(Arrays.toString(arraysNumber));
dialog.setLayout(new FlowLayout());
JButton yesButton = new JButton();
JButton noButton = new JButton();
if(optionType==YES_NO_OPTION) {
yesButton.setText("是(Yes)");
noButton.setText("否(No)");
}
else {
JOptionPane.showMessageDialog
(parentComponent,"参数取值不正确","消息",JOptionPane.ERROR_MESSAGE);
return backNumber;
}
dialog.add(mess);
dialog.add(showArray);
dialog.add(yesButton);
dialog.add(noButton);
yesButton.addActionListener((e)->{
backNumber = arraysNumber;
dialog.setVisible(false);
});
noButton.addActionListener((e)->{
dialog.setVisible(false);
});
Font f = new Font("",Font.BOLD,28);
SetFont.setFont(f,mess,showArray,yesButton,noButton);
dialog.setBounds(500,60,600,300);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
return backNumber;
}
private static int [] getRandomNumber(int max,int amount) {
// 1至max之间的amount个不同随机整数(包括1和max)
int [] randomNumber = new int[amount];
Random random = new Random();
int count = 0;
while(count<amount){
int number = random.nextInt(max)+1;
boolean isInArrays=false;
for(int m:randomNumber){//m依次取数组randomNumber元素的值
if(m == number){
isInArrays=true; //number在数组里了
break;
}
}
if(isInArrays==false){
//如果number不在数组randomNumber中:
randomNumber[count] = number;
count++;
}
}
return randomNumber;
}
}
import javax.swing.JComponent;
import java.awt.Font;
public class SetFont {
public static void setFont(Font f,JComponent ...component){
for(JComponent c:component)
c.setFont(f);
}
}