Java 的 Swing 是一个用于构建图形用户界面 (GUI) 的库,它提供了丰富的组件和工具来创建跨平台的桌面应用程序。Swing 是 Java Foundation Classes (JFC) 的一部分,提供了更灵活和可定制的 GUI 组件,与早期的 Abstract Window Toolkit (AWT) 相比,它有更多的功能和更好的性能。
Swing 提供了许多基本的 GUI 组件,这些组件可以组合和定制来创建复杂的用户界面。以下是一些常用的 Swing 组件:
- JFrame:顶层窗口,用于创建应用程序的主窗口。
- JPanel:轻量级容器,可以在其中放置其他组件,并且可以使用不同的布局管理器。
- JButton:按钮组件,用于触发事件。
- JLabel:标签组件,用于显示文本或图标。
- JTextField:单行文本输入框。
- JTextArea:多行文本输入框。
- JPasswordField:密码输入框,输入的内容用掩码字符显示。
- JCheckBox:复选框组件,可以选择或取消选择。
- JRadioButton:单选按钮,通常与
ButtonGroup
一起使用,以确保在一组按钮中只有一个按钮被选择。 - JComboBox:组合框组件,可以从下拉列表中选择一个选项。
- JList:列表组件,可以选择一个或多个选项。
- JScrollPane:滚动面板,用于在视图中包含大型组件,并提供滚动功能。
- JTabbedPane:选项卡面板,可以在同一个窗口中显示多个选项卡。
- JMenuBar、JMenu 和 JMenuItem:用于创建菜单栏和菜单项。
第一节 组合框与列表
Swing 组合框 (JComboBox)
JComboBox 是一个下拉列表组件,允许用户从预定义的选项中选择一个值。
package com.xml.learn;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ComboBoxExample {
public static void main(String[] args) {
// 创建顶级容器
JFrame frame = new JFrame("JComboBox Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
// 创建中间级容器其
JPanel panel = new JPanel();
// 创建组合框
String[] items = {"Item1", "Item2", "Item3", "Item4"};
JComboBox<String> comboBox = new JComboBox<>(items); // 使用泛型
panel.add(comboBox); // 组合框加入中间级容器
frame.add(panel); // 中间级容器加入顶级容器
frame.setVisible(true);
}
}
执行效果:
Swing 列表 (JList)
JList 是一个列表组件,可以显示一个或多个选项,并允许用户选择一个或多个选项。
package com.xml.learn;
import javax.swing.*;
import java.awt.*;
public class ListExample {
public static void main(String[] args) {
JFrame frame = new JFrame("JList Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
JPanel panel = new JPanel();
String[] items = { "Item 1", "Item 2", "Item 3", "Item 4" };
JList<String> list = new JList<>(items);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrollPane = new JScrollPane(list);
panel.add(scrollPane);
frame.add(panel);
frame.setVisible(true);
}
}
执行效果:
组合框与列表的使用
- 组合框 (JComboBox):
- 通常用于提供有限的选项集。
- 用户可以选择一个选项,也可以通过自定义编辑器使其可编辑。
- 列表 (JList):
- 通常用于显示大量选项。
- 可以配置为允许单选、多选或无选择。
示例应用
综合使用组合框和列表的示例应用:
import javax.swing.*;
import java.awt.*;
public class ComboBoxAndListExample {
public static void main(String[] args) {
JFrame frame = new JFrame("ComboBox and List Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
JPanel panel = new JPanel(new BorderLayout());
// JComboBox
String[] comboBoxItems = { "Option 1", "Option 2", "Option 3", "Option 4" };
JComboBox<String> comboBox = new JComboBox<>(comboBoxItems);
panel.add(comboBox, BorderLayout.NORTH);
// JList
String[] listItems = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
JList<String> list = new JList<>(listItems);
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
JScrollPane scrollPane = new JScrollPane(list);
panel.add(scrollPane, BorderLayout.CENTER);
frame.add(panel);
frame.setVisible(true);
}
}
执行效果:(JList按CTRL或者SHIFT可实现多选)
JComboBox 和 JList 是 Swing 中常用的选择组件。
JComboBox 提供单选下拉列表。
JList 提供多选列表,并且可以配置选择模式。
这些组件可以结合其他 Swing 组件使用,创建复杂的用户界面。
第二节 文本组件
Java Swing 提供了多种文本组件,用于显示和编辑文本内容。常用的 Swing 文本组件包括 JTextField
、JPasswordField
、JTextArea
和 JEditorPane
等。这些组件可以满足不同的需求,从简单的单行文本输入到复杂的多行文本编辑和显示。
常用文本组件
1. JTextField
JTextField
是一个单行文本输入框,用于接收用户输入。
package com.xml.learn;
import javax.swing.*;
import java.awt.*;
public class JTextFieldExample {
public static void main(String[] args) {
JFrame frame = new JFrame("JTextField Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
JPanel panel = new JPanel();
JTextField textField = new JTextField(20);
panel.add(textField);
frame.add(panel);
frame.setVisible(true);
}
}
执行结果:
2. JPasswordField
JPasswordField
是一个密码输入框,输入的内容用掩码字符显示。
package com.xml.learn;
import javax.swing.*;
import java.awt.*;
public class JPasswordFieldExample {
public static void main(String[] args) {
JFrame frame = new JFrame("JPasswordField Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
JPanel panel = new JPanel();
JPasswordField passwordField = new JPasswordField(20);
panel.add(passwordField);
frame.add(panel);
frame.setVisible(true);
}
}
执行结果:
3. JTextArea
JTextArea
是一个多行文本输入框,用于接收和显示多行文本。
package com.xml.learn;
import javax.swing.*;
import java.awt.*;
public class JTextAreaExample {
public static void main(String[] args) {
JFrame frame = new JFrame("JTextArea Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
JPanel panel = new JPanel();
JTextArea textArea = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(textArea);
panel.add(scrollPane);
frame.add(panel);
frame.setVisible(true);
}
}
执行效果:
4. JEditorPane
JEditorPane
是一个高级文本组件,可以显示和编辑多种格式的内容,例如 HTML 和 RTF。
package com.xml.learn;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
public class JEditorPaneExample {
public static void main(String[] args) {
JFrame frame = new JFrame("JEditorPane Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
JPanel panel = new JPanel(new BorderLayout());
JEditorPane editorPane = new JEditorPane();
try {
editorPane.setPage("https://www.baidu.com");
} catch (IOException e) {
e.printStackTrace();
}
JScrollPane scrollPane = new JScrollPane(editorPane);
panel.add(scrollPane, BorderLayout.CENTER);
frame.add(panel);
frame.setVisible(true);
}
}
执行结果:
主要方法和属性
以下是一些常用的文本组件的主要方法和属性:
- JTextField 和 JPasswordField:
getText()
: 获取文本内容。setText(String text)
: 设置文本内容。setColumns(int columns)
: 设置文本字段的列数。
- JTextArea:
getText()
: 获取文本内容。setText(String text)
: 设置文本内容。setRows(int rows)
: 设置文本区域的行数。setColumns(int columns)
: 设置文本区域的列数。
- JEditorPane:
setPage(URL url)
: 设置显示页面的 URL。setPage(String url)
: 设置显示页面的 URL(字符串格式)。setText(String text)
: 设置显示的文本内容。
事件处理
所有文本组件都可以处理用户输入事件。例如,可以使用 ActionListener
来监听 JTextField
的回车事件:
package com.xml.learn;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JTextFieldActionListenerExample {
public static void main(String[] args) {
JFrame frame = new JFrame("JTextField ActionListener Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
JPanel panel = new JPanel();
JTextField textField = new JTextField(20);
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("TextField content: " + textField.getText());
}
});
panel.add(textField);
frame.add(panel);
frame.setVisible(true);
}
}
执行效果:
当用户在 JTextField
中输入文本并按下回车键时,会触发 ActionListener
,并在控制台输出文本内容。
- JTextField 和 JPasswordField 是单行文本输入组件,分别用于普通文本和密码输入。
- JTextArea 是多行文本输入组件,用于显示和编辑多行文本。
- JEditorPane 是高级文本组件,可以显示和编辑复杂格式的文本内容。
这些文本组件广泛用于 Java Swing 应用程序中,提供了丰富的文本显示和编辑功能。
第三节 菜单组件
Java Swing 提供了强大的菜单组件,用于在 GUI 应用程序中创建和管理菜单。主要的菜单组件包括 JMenuBar
、JMenu
、JMenuItem
、JCheckBoxMenuItem
和 JRadioButtonMenuItem
。这些组件可以帮助开发者创建层次化的菜单系统,提供丰富的用户交互功能。
主要菜单组件
1. JMenuBar
JMenuBar
是菜单栏,通常放置在窗口的顶部。
2. JMenu
JMenu
是菜单项,可以包含多个子菜单或菜单项。
3. JMenuItem
JMenuItem
是具体的菜单项,可以触发特定的操作。
4. JCheckBoxMenuItem
JCheckBoxMenuItem
是复选框菜单项,可以选中或取消选中。
5. JRadioButtonMenuItem
JRadioButtonMenuItem
是单选按钮菜单项,一组选项中只能选中一个。
示例代码
以下是一个使用上述菜单组件创建简单菜单的示例:
package com.xml.learn;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MenuExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Menu Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
JMenuBar menuBar = new JMenuBar();
// 创建文件菜单
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
// 创建文件菜单项
JMenuItem openItem = new JMenuItem("Open");
JMenuItem saveItem = new JMenuItem("Save");
JMenuItem exitItem = new JMenuItem("Exit");
// 添加文件菜单项到文件菜单
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.addSeparator(); // 添加分隔符
fileMenu.add(exitItem);
// 创建编辑菜单
JMenu editMenu = new JMenu("Edit");
menuBar.add(editMenu);
// 创建编辑菜单项
JMenuItem cutItem = new JMenuItem("Cut");
JMenuItem copyItem = new JMenuItem("Copy");
JMenuItem pasteItem = new JMenuItem("Paste");
// 添加编辑菜单项到编辑菜单
editMenu.add(cutItem);
editMenu.add(copyItem);
editMenu.add(pasteItem);
// 创建查看菜单
JMenu viewMenu = new JMenu("View");
menuBar.add(viewMenu);
// 创建复选框菜单项
JCheckBoxMenuItem checkBoxMenuItem = new JCheckBoxMenuItem("Show Line Numbers");
viewMenu.add(checkBoxMenuItem);
// 创建单选按钮菜单项
JRadioButtonMenuItem radioButtonMenuItem1 = new JRadioButtonMenuItem("Light Theme");
JRadioButtonMenuItem radioButtonMenuItem2 = new JRadioButtonMenuItem("Dark Theme");
// 创建按钮组,确保只有一个单选按钮菜单项被选中
ButtonGroup group = new ButtonGroup();
group.add(radioButtonMenuItem1);
group.add(radioButtonMenuItem2);
viewMenu.add(radioButtonMenuItem1);
viewMenu.add(radioButtonMenuItem2);
// 设置菜单栏
frame.setJMenuBar(menuBar);
// 添加菜单项事件监听器
exitItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
frame.setVisible(true);
}
}
执行效果:
主要方法和属性
- JMenuBar
add(JMenu menu)
: 将菜单添加到菜单栏。
- JMenu
add(JMenuItem menuItem)
: 将菜单项添加到菜单。addSeparator()
: 添加分隔符。
- JMenuItem
addActionListener(ActionListener listener)
: 为菜单项添加动作监听器。
- JCheckBoxMenuItem
setSelected(boolean b)
: 设置复选框菜单项的选中状态。isSelected()
: 返回复选框菜单项的选中状态。
- JRadioButtonMenuItem
setSelected(boolean b)
: 设置单选按钮菜单项的选中状态。isSelected()
: 返回单选按钮菜单项的选中状态。
菜单事件处理
菜单项通常会添加动作监听器来处理用户选择菜单项后的操作。例如:
exitItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
在这个示例中,当用户选择 "File"->"Exit" 菜单项时,程序会退出。
总结
- JMenuBar 是菜单栏,用于容纳菜单。
- JMenu 是菜单,可以包含子菜单或菜单项。
- JMenuItem 是具体的菜单项,用于触发特定操作。
- JCheckBoxMenuItem 是复选框菜单项,可以选中或取消选中。
- JRadioButtonMenuItem 是单选按钮菜单项,一组选项中只能选中一个。
第四节 对话框组件
Java Swing 提供了多种对话框组件,用于与用户进行交互,包括消息对话框、输入对话框、确认对话框等。主要的对话框类是 JOptionPane
,它提供了许多静态方法来显示各种类型的对话框。
JOptionPane
类
JOptionPane
是一个实用类,包含一系列静态方法,用于创建并显示各种类型的对话框。这些对话框包括:
- 消息对话框(Message Dialog)
- 确认对话框(Confirmation Dialog)
- 输入对话框(Input Dialog)
- 选项对话框(Option Dialog)
主要对话框类型
1. 消息对话框
用于向用户显示一条消息。
JOptionPane.showMessageDialog(null, "This is a message dialog.");
可以指定对话框的消息类型,如信息、警告、错误等。
JOptionPane.showMessageDialog(null, "This is an information message.", "Information", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null, "This is a warning message.", "Warning", JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(null, "This is an error message.", "Error", JOptionPane.ERROR_MESSAGE);
2. 确认对话框
用于向用户提出一个是/否的问题。
int response = JOptionPane.showConfirmDialog(null, "Do you want to proceed?", "Confirmation", JOptionPane.YES_NO_OPTION);
if (response == JOptionPane.YES_OPTION) {
System.out.println("User chose Yes.");
} else {
System.out.println("User chose No.");
}
3. 输入对话框
用于从用户处获取输入。
String userInput = JOptionPane.showInputDialog(null, "Please enter your name:");
System.out.println("User input: " + userInput);
可以提供默认输入值:
String userInput = JOptionPane.showInputDialog(null, "Please enter your name:", "Default Name");
System.out.println("User input: " + userInput);
4. 选项对话框
用于向用户提供一组自定义选项。
Object[] options = {"Option 1", "Option 2", "Option 3"};
int response = JOptionPane.showOptionDialog(null, "Choose an option", "Option Dialog", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[0]);
System.out.println("User chose: " + options[response]);
使用示例
以下是一个示例程序,展示了如何使用上述对话框类型:
package com.xml.learn;
import javax.swing.*;
public class DialogExample {
public static void main(String[] args) {
// 消息对话框
JOptionPane.showMessageDialog(null, "This is an information message.", "Information", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null, "This is a warning message.", "Warning", JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(null, "This is an error message.", "Error", JOptionPane.ERROR_MESSAGE);
// 确认对话框
int confirmResponse = JOptionPane.showConfirmDialog(null, "Do you want to proceed?", "Confirmation", JOptionPane.YES_NO_OPTION);
if (confirmResponse == JOptionPane.YES_OPTION) {
System.out.println("User chose Yes.");
} else {
System.out.println("User chose No.");
}
// 输入对话框
String userInput = JOptionPane.showInputDialog(null, "Please enter your name:");
System.out.println("User input: " + userInput);
// 选项对话框
Object[] options = {"Option 1", "Option 2", "Option 3"};
int optionResponse = JOptionPane.showOptionDialog(null, "Choose an option", "Option Dialog", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[0]);
System.out.println("User chose: " + options[optionResponse]);
}
}
执行结果:
在Console中显示结果:
- 消息对话框:显示信息、警告或错误消息给用户。
- 确认对话框:请求用户确认某个操作(是/否)。
- 输入对话框:从用户获取输入。
- 选项对话框:向用户提供一组自定义选项供选择。
这些对话框组件可以显著增强 Java Swing 应用程序的用户交互体验。