大纲视图
匿名内部类
没有名字,类定义和实例化同时完成,new 父类(参数列表)或接口(){…}
可以方便地访问外部类的成员
对话框
都是Windows的子类,是顶级对话框,对话框上面没有最大化和最小化按钮
父窗口和子窗口
- 大部分对话框都有父窗口
- 子窗口始终显示在父窗口上
- 父窗口关闭,子窗口一起关闭
模态与非模态
- 模态对话框关闭前,其他窗口得不到焦点,即不可操作
对话框的简单实例
```java
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class JDialogDemo6618 extends JFrame {
JPanel p1, p2;
JButton btnMod, btnNon, btnDialog;
JDialog modDialog, nonDialog, dialog;
JLabel lblMessage;
public JDialogDemo6618() {
super("6618对话框的特点");
this.setSize(500, 400);
this.setLocation(200, 100);
Font font = new Font("宋体", Font.PLAIN, 20);
UIManager.put("Label.font", font);
UIManager.put("Button.font", font);
initUI6618();
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);
}
private void initUI6618() {
p1 = new JPanel();
String str = "<html><body><br><br>" + "1.了解对话框的父窗口与子窗口的关系<br><br>" + "2.比较模态和非模态对话框。<br> <br><br><body><html>";
lblMessage = new JLabel(str);
lblMessage.setFont(new Font("黑体", Font.PLAIN, 24));
p1.add(lblMessage);
this.add(p1);
p2 = new JPanel();
btnMod = new JButton("模态对话框");
btnNon = new JButton("非模态对话框");
btnDialog = new JButton("简单对话框");
p2.add(btnMod);
p2.add(btnNon);
p2.add(btnDialog);
this.add(p2, BorderLayout.SOUTH);
// 创建模态对话框
modDialog = new JDialog(this, "模态对话框", true);
modDialog.add(new JLabel("模态对话框"));
modDialog.setBounds(260, 140, 280, 160);
// 创建非模态对话框
nonDialog = new JDialog(this, "非模态对话框", false);
nonDialog.add(new JLabel("非模态对话框"));
nonDialog.setBounds(300, 200, 300, 200);
// 创建非模态,无父窗口的对话框
dialog = new JDialog();
dialog.setTitle("简单对话框");
dialog.add(new JLabel("简单对话框 "));
dialog.setBounds(250, 200, 260, 180);
dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//模态对话框
btnMod.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
modDialog.setVisible(true);
}
});
//非模态对话框
btnNon.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nonDialog.setVisible(true);
}
});
//简单对话框
btnDialog.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.setVisible(true);
}
});
}
public static void main(String[] args) {
new JDialogDemo6618();
}
}
常用组件
复选框
单选按钮
组合框
边框类的实现
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;
public class TaskButtonAndFontXXXX extends JFrame {
private String fontName;// 当前字体的名字
int fontStyle, fontSize;// 当前字体的字形与字号
private String[] colors, names;// 可供选择的颜色和字体名字
private Integer[] sizes;// 可供选择的字号
private JPanel p, pStyle, pName, pColor;
private JLabel lblFont;
private JCheckBox jcbItalic, jcbBold;
private JComboBox<Integer> jcbSize;
private ButtonGroup gColor, gName;// 用于为RadioButton分组
public TaskButtonAndFontXXXX() {
super("XXXX用选择性组件修改字体");
this.setSize(700, 400);
this.setLocation(200, 100);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// 设置默认字体
fontName = "宋体";
fontStyle = Font.PLAIN;
fontSize = 20;
Font font = new Font(fontName, fontStyle, fontSize);
UIManager.put("RadioButton.font", font);
UIManager.put("CheckBox.font", font);
UIManager.put("ComboBox.font", font);
UIManager.put("Label.font", font);
initUIXXX();
eventHandlerXXXX();
this.setVisible(true);
}
private void initUIXXX() {
lblFont = new JLabel("按钮组件是抽象类AbstractButton的子类", JLabel.CENTER);
this.add(lblFont);
// 字体名与颜色的两组RadioButton
addNameXXXX();
addColorXXXX();
// 字形
pStyle = new JPanel();
pStyle.setBorder(new TitledBorder("字形"));
jcbItalic = new JCheckBox("钭体");
jcbBold = new JCheckBox("加粗");
pStyle.add(jcbItalic);
pStyle.add(jcbBold);
// 字号
sizes = new Integer[] { 10, 12, 14, 20, 28, 30, 36, 40 };
jcbSize = new JComboBox<Integer>(sizes);
jcbSize.setBorder(new TitledBorder("字号"));
// 设置初始状态
jcbSize.setSelectedIndex(3);
p = new JPanel();
p.add(pName);
p.add(pStyle);
p.add(pColor);
p.add(jcbSize);
this.add(p, BorderLayout.SOUTH);
}
private void addNameXXXX() {
// 内部监听类
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 根据文本选择字体
String str = e.getActionCommand();
lblFont.setFont(new Font(str, 01, 32));
}
};
// 一组RadioButton,设置可选的字体名称
JRadioButton radioButton = null;
names = new String[] { "黑体", "隶书", "宋体" };
pName = new JPanel();
pName.setBorder(new TitledBorder("字体"));
gName = new ButtonGroup();
// 用循环来减少代码量
for (String text : names) {
radioButton = new JRadioButton(text);
radioButton.addActionListener(listener);
pName.add(radioButton);
gName.add(radioButton);// 字体名称的RadioButton放在同一组中
}
// 设置初始状态
radioButton.setSelected(true);
}
private void addColorXXXX() {
// 内部监听类
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 根据文本选择颜色
String str = e.getActionCommand();
Color color = null;
switch (str) {
case "红":
color = Color.red;
break;
case "兰":
color = Color.blue;
break;
case "黄":
color = Color.yellow;
break;
case "黑":
color = Color.black;
break;
}
lblFont.setForeground(color);
}
};
// 一组RadioButton,设置可选的颜色
// 用数组和循环,减少代码量,使代码更简洁
colors = new String[] { "红", "兰", "黄", "黑" };
JRadioButton radioButton = null;
pColor = new JPanel();
pColor.setBorder(new TitledBorder("颜色"));
gColor = new ButtonGroup();
for (String text : colors) {
radioButton = new JRadioButton(text);
radioButton.addActionListener(listener);
pColor.add(radioButton);
gColor.add(radioButton);
// 颜色的RadioButton放在同一组中
}
// 初始状态
radioButton.setSelected(true);
}
private void eventHandlerXXXX() {
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//获取字体号
Object num =jcbSize.getSelectedItem();
int mode = 0;
// 如果选择斜体
if (jcbBold.isSelected()) {
mode += Font.BOLD;
}
// 如果选择加粗
if (jcbItalic.isSelected()) {
mode += Font.BOLD;
} // 斜体和加粗可以按二进制叠加
lblFont.setFont(new Font("微软雅黑", mode, (int) num));
}
};
// 添加监听对象
jcbBold.addActionListener(listener);
jcbItalic.addActionListener(listener);
jcbSize.addActionListener(listener);
}
public static void main(String[] args) {
new TaskButtonAndFontXXXX();
}
}
```java
下拉菜单