Java图形界面实用教程

一、常用组件

1. JFrame

JFrame是Swing中最常用的顶级容器,它用于包含和管理其他Swing组件。JFrame提供了一些常用的方法,如setTitle()、setDefaultCloseOperation()、setResizable()、setVisible()等等,用于控制窗口的外观和行为。

2. JPanel

JPanel是Swing中常用的容器组件,用于将其他Swing组件放置在一起,形成一个组件集合。JPanel可以嵌套在其他容器中,如JFrame、JDialog等等。

3. JLabel

JLabel是Swing中用于显示文本或图像的组件,它可以用于显示静态的提示信息或标签等等。JLabel提供了一些常用的方法,如setText()、setIcon()、setHorizontalAlignment()等等,用于控制标签的文本和图像内容以及对齐方式等。

4. JTextField

JTextField是Swing中用于接收单行文本输入的组件,它可以用于输入和显示文本信息。JTextField提供了一些常用的方法,如setText()、getText()、setEditable()等等,用于控制文本框的内容和可编辑性等。

5. JButton

JButton是Swing中用于响应用户单击操作的组件,它可以用于触发相应的事件处理程序,如打开一个文件、执行计算等等。JButton提供了一些常用的方法,如setText()、setMnemonic()、addActionListener()等等,用于控制按钮的文本、快捷键和事件监听等。

6. JCheckBox

JCheckBox是Swing中用于提供复选框选项的组件,它可以用于让用户选择多个选项。JCheckBox提供了一些常用的方法,如setText()、isSelected()、addItemListener()等等,用于控制复选框的文本和选中状态以及事件监听等。

7. JRadioButton

JRadioButton是Swing中用于提供单选框选项的组件,它可以用于让用户从多个选项中选择一个。JRadioButton提供了一些常用的方法,如setText()、isSelected()、addItemListener()等等,用于控制单选框的文本和选中状态以及事件监听等。

8. JComboBox

JComboBox是Swing中用于提供下拉列表选项的组件,它可以用于让用户从多个选项中选择一个。JComboBox提供了一些常用的方法,如addItem()、setSelectedIndex()、addActionListener()等等,用于控制下拉列表的选项和选中状态以及事件监听等。

9. JList

JList是Swing中用于显示列表项的组件,它可以用于显示多个选项并允许用户进行选择。JList提供了一些常用的方法,如setListData()、getSelectedValue()、addListSelectionListener()等等,用于控制列表项的数据和选中值以及事件监听等。

(一)JPanel中常用方法

JPanel提供了一些常用的方法,如add()、remove()、setLayout()、getPreferredSize()等等,用于控制面板中的组件和布局方式以及尺寸等。下面是一些常用的方法介绍:

  1. add(Component comp)
    该方法用于向面板中添加一个组件,其中 comp 表示要添加的组件。该方法还可以接受一个整数参数,用于指定组件的索引位置。例如,panel.add(button)将向面板中添加一个按钮组件。
  2. remove(Component comp)
    该方法用于从面板中删除一个组件,其中comp表示要删除的组件。例如,panel.remove(button)将从面板中删除一个按钮组件。
  3. setLayout(LayoutManager manager)
    该方法用于设置面板的布局管理器,其中manager表示要使用的布局管理器。例如,panel.setLayout(new BorderLayout())将设置面板的布局管理器为边界布局管理器。
  4. getPreferredSize()
    该方法用于获取面板的首选大小,即面板的推荐尺寸。例如,Dimension size = panel.getPreferredSize()将获取面板的首选大小,并将其存储在一个Dimension对象中。

需要注意的是,JPanel默认使用流式布局管理器FlowLayout,该布局管理器按照添加顺序排列组件,并根据组件的首选大小自动调整其位置和大小。如果需要使用其他布局管理器,需要通过setLayout()方法来设置。

另外,JPanel还可以使用setBorder()方法来设置面板的边框样式,使用setBackground()方法来设置面板的背景色等等。JPanel的灵活性和多功能性使得它成为Swing界面设计中不可或缺的一部分。

(二)使用JPanel的场景如下

  1. 实现复杂的布局
    当需要将多个Swing组件组合在一起,并且需要进行复杂的布局时,可以使用JPanel。JPanel可以嵌套在其他容器中,如JFrame、JDialog等等,并且可以使用不同的布局管理器来控制子组件的位置和大小,以实现各种复杂的布局效果。
  2. 分组显示相关组件
    当需要将多个相关的Swing组件放置在一起,并对其进行分组显示时,可以使用JPanel。例如,一个包含多个按钮和标签的设置面板,可以将按钮和标签分别放置在不同的JPanel中,并将它们嵌套在同一个容器中。
  3. 显示动态的组件
    当需要动态地添加、删除或更改组件时,可以使用JPanel。JPanel提供了add()、remove()等方法,可以方便地添加和删除子组件,并且可以使用repaint()方法来强制刷新面板中的所有组件,以实现动态的显示效果。
  4. 实现重用的自定义组件
    当需要创建可重用的自定义组件时,可以使用JPanel。JPanel可以作为自定义组件的基础容器,可以将其他Swing组件放置在其中,并将其封装为一个独立的可重用组件,以方便在不同的应用程序中进行复用。

总的来说,JPanel是Swing中常用的容器组件,用于将其他Swing组件放置在一起,形成一个组件集合。它可以嵌套在其他容器中,如JFrame、JDialog等等,并且可以用于实现复杂的布局、分组显示相关组件、显示动态的组件以及实现重用的自定义组件等等。

(三)常用布局管理器

Java提供了多种布局管理器,用于控制组件在容器中的排列方式。以下是一些常用的布局管理器:

1. BorderLayout

描述:将容器分成5个区域:北、南、东、西和中心,各个组件可以填充其中一个或多个区域。

使用场景:适合用于将组件分割成不同的区域。

代码示例

JFrame frame = new JFrame("BorderLayout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());

frame.add(new JButton("North"), BorderLayout.NORTH);
frame.add(new JButton("South"), BorderLayout.SOUTH);
frame.add(new JButton("East"), BorderLayout.EAST);
frame.add(new JButton("West"), BorderLayout.WEST);
frame.add(new JButton("Center"), BorderLayout.CENTER);

frame.pack();
frame.setVisible(true);

2. FlowLayout

描述:按照添加组件的顺序,从左往右依次排列组件,如果一行排不下就自动换行。

使用场景:适合用于流式布局,将组件一行一行地排列。

代码示例

JFrame frame = new JFrame("FlowLayout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());

frame.add(new JButton("Button 1"));
frame.add(new JButton("Button 2"));
frame.add(new JButton("Button 3"));

frame.pack();
frame.setVisible(true);
\```

### 3. GridLayout

**描述**:将容器分成指定的行数和列数的网格,组件按照顺序填充到每个单元格中。

**使用场景**:适合用于按网格布局排列组件。

**代码示例**:

```java
JFrame frame = new JFrame("GridLayout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(3, 2));

frame.add(new JButton("Button 1"));
frame.add(new JButton("Button 2"));
frame.add(new JButton("Button 3"));
frame.add(new JButton("Button 4"));
frame.add(new JButton("Button 5"));
frame.add(new JButton("Button 6"));

frame.pack();
frame.setVisible(true);

4. CardLayout

描述:将容器中的组件按照卡片的方式进行切换,每次只显示其中一个组件。

使用场景:适合用于在多个组件之间进行切换。

代码示例

JFrame frame = new JFrame("CardLayout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

CardLayout cardLayout = new CardLayout();
frame.setLayout(cardLayout);

frame.add(new JLabel("Card 1"), "card1");
frame.add(new JLabel("Card 2"), "card2");

frame.pack();
frame.setVisible(true);

// 切换到下一张卡片
cardLayout.next(frame.getContentPane());

5. BoxLayout

描述:将组件按照水平或垂直方向进行排列,可以指定每个组件的最小和最大尺寸。

使用场景:适合按照水平或垂直方向排列组件,并指定最小和最大尺寸。

代码示例

JFrame frame = new JFrame("BoxLayout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));

frame.add(new JButton("Button 1"));
frame.add(new JButton("Button 2"));
frame.add(new JButton("Button 3"));

frame.pack();
frame.setVisible(true);

6. GridBagLayout

描述:一种灵活的布局管理器,可以为组件指定行、列、宽度、高度、填充方式等属性。

使用场景:适合用于实现更复杂的布局需求。

代码示例

JFrame frame = new JFrame("GridBagLayout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());

GridBagConstraints constraints = new GridBagConstraints();

// 添加 Button 1
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
frame.add(new JButton("Button 1"), constraints);

// 添加 Button 2
constraints.gridx = 1;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
frame.add(new JButton("Button 2"), constraints);

// 添加 Button 3
constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 2;
constraints.gridheight = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
frame.add(new JButton("Button 3"), constraints);

frame.pack();
frame.setVisible(true);

以上就是Java中常用的布局管理器。

二、常用事件处理响应

Java的Listener是用于事件处理的一种机制,主要用于接收和处理用户界面上的各种事件。下面介绍一些常用的Listener方法和接口:
ActionListener接口:用于处理按钮、菜单等组件的动作事件。
MouseListener接口:用于处理鼠标事件,如鼠标单击、鼠标移动等。
KeyListener接口:用于处理键盘事件,如键盘按下、键盘释放等。
FocusListener接口:用于处理焦点事件,如组件获得焦点、组件失去焦点等。
ItemListener接口:用于处理复选框和单选按钮的选择事件。
WindowListener接口:用于处理窗口事件,如窗口打开、窗口关闭等。

三、上面接口对应的适配器(减少接口中方法的重写)

在Java中,适配器类是一种实现某个接口但并不完全实现该接口的类。它可以作为接口的中间层,使得我们在实现接口方法时,只需要重写自己需要的方法,而不需要全部重写。常见的适配器类包括:

MouseAdapter类:实现了MouseListener和MouseWheelListener接口,但其中的方法都是空实现,方便我们使用时只重写需要的方法。

KeyAdapter类:实现了KeyListener接口,但其中的方法都是空实现我们使用时只重写需要的方法。

WindowAdapter类:实现了WindowListener接口和WindowFocusListener接口,但其中的方法都是空实现,方便我们使用时只重写需要的方法。

ComponentAdapter类:实现了ComponentListener接口,但其中的方法都是空实现,方便我们使用时只重写需要的方法。

ContainerAdapter类:实现了ContainerListener接口,但其中的方法都是空实现,方便我们使用时只重写需要的方法。

FocusAdapter类:实现了FocusListener接口,但其中的方法都是空实现,方便我们使用时只重写需要的方法。

适配器类的作用是让我们在实现接口的时候不必重写全部的方法,而只需要重写我们需要的方法。这样能够减少代码的冗余,提高代码的可读性和可维护性。

四、常用函数方法

以下是一些在Java图形界面编程中常用的函数方法:

1. setText()

setText()方法用于设置组件内的文字内容。可以应用到诸如JTextFieldJButtonJLabel等组件上。

示例:设置JTextField中的文本内容。

JTextField text = new JTextField();
text.setText("请输入");

此时,text文本框内将显示“请输入”。

2. getText()

getText()方法用于提取组件内的文字。通常用于获取用户在文本框中输入的内容。

示例:从JTextField中提取输入的文本。

String input = text.getText();

3. add()

add()方法用于向容器(如JPanel和JFrame)中添加组件。

示例:向JPanel中添加一个按钮。

JPanel panel = new JPanel();
JButton button = new JButton("点击我");
panel.add(button);

4. 创建并设置基本的图形界面

以下代码展示了创建一个基本的图形界面所需的必要步骤

// 创建一个JFrame窗口并设置标题
JFrame frame = new JFrame("图形界面示例");

// 设置窗口大小
frame.setSize(450, 350);

// 设置窗口关闭操作,关闭窗口时终止程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// 在此处添加组件和设置布局管理器...

// 设置窗口可见性,否则运行时看不到窗口
frame.setVisible(true);
  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个简单的 Java 登录界面并跳转的实现案例: 1. 创建一个名为 Login 的类。 2. 在 Login 类中创建一个名为 main 的方法。 3. 在 main 方法中创建一个 JFrame 对象,设置窗口标题、大小、位置等属性。 4. 在 JFrame 对象中添加用户名和密码的输入框、登录按钮等组件,设置它们的位置和大小。 5. 给登录按钮添加一个 ActionListener 监听器,用于响应用户的登录操作。 6. 在 ActionListener 监听器中获取用户名和密码的输入框中的值,并校验用户名和密码是否正确。 7. 如果用户名和密码正确,则跳转到一个新的窗口,否则在当前窗口中显示相应的错误提示信息。 代码示例: ``` import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Login { public static void main(String[] args) { JFrame frame = new JFrame("登录"); frame.setSize(300, 200); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(null); JLabel label1 = new JLabel("用户名:"); label1.setBounds(50, 30, 60, 20); panel.add(label1); JTextField textField1 = new JTextField(); textField1.setBounds(110, 30, 120, 20); panel.add(textField1); JLabel label2 = new JLabel("密码:"); label2.setBounds(50, 60, 60, 20); panel.add(label2); JPasswordField passwordField = new JPasswordField(); passwordField.setBounds(110, 60, 120, 20); panel.add(passwordField); JButton button = new JButton("登录"); button.setBounds(110, 90, 60, 20); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String username = textField1.getText(); String password = String.valueOf(passwordField.getPassword()); if ("admin".equals(username) && "123456".equals(password)) { JOptionPane.showMessageDialog(frame, "登录成功!"); frame.dispose(); // 跳转到新的窗口 JFrame newFrame = new JFrame("欢迎"); newFrame.setSize(300, 200); newFrame.setLocationRelativeTo(null); newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("欢迎 " + username + " 登录!"); label.setHorizontalAlignment(SwingConstants.CENTER); newFrame.add(label); newFrame.setVisible(true); } else { JOptionPane.showMessageDialog(frame, "用户名或密码错误!"); } } }); panel.add(button); frame.add(panel); frame.setVisible(true); } } ``` 以上示例仅为一个简单的 Java 登录界面并跳转的实现案例,实际生产环境中需要考虑更多的安全性问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PlatinumA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值