Java核心(Swing 程序设计3-常用面板、按钮组件)

一、常用面板

    面板也是一个 Swing 容器,它可以作为容器容纳其他组件,但它必须被添加到其他容器中。Swing 中常用的面板包括 JPanel 面板以及 JScrollPane 面板。

    1.1 JPanel 面板

    JPanel 面板可以聚集一些组件来布局。继承 java.awy.Container 类。

    eg 1.1 在项目中创建 JPanelTest 类,该类继承 JFrame 类成为窗体组件,在该类中创建 4 个 JPanel 面板组件,并将它们添加到窗体中。

package com.SwingDemo;

import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class JPanelTest extends JFrame {
    public JPanelTest() {
        Container container = getContentPane();
        // 将整个容器设置为 2 行 1 列的网格布局
        container.setLayout(new GridLayout(2, 1, 10, 10));
        // 初始化一个面板,设置 1 行 3 列的网格布局
        JPanel p1 = new JPanel(new GridLayout(1, 3, 10, 10));
        JPanel p2 = new JPanel(new GridLayout(1, 2, 10, 10));
        JPanel p3 = new JPanel(new GridLayout(1, 2, 10, 10));
        JPanel p4 = new JPanel(new GridLayout(2, 1, 10, 10));
        // 在面板中添加按钮
        p1.add(new JButton("1"));
        p1.add(new JButton("1"));
        p1.add(new JButton("2"));
        p1.add(new JButton("3"));
        p2.add(new JButton("4"));
        p2.add(new JButton("5"));
        p3.add(new JButton("6"));
        p3.add(new JButton("7"));
        p4.add(new JButton("8"));
        p4.add(new JButton("9"));
        // 在容器中添加面板
        container.add(p1);
        container.add(p2);
        container.add(p3);
        container.add(p4);
        setTitle("在这个窗体中使用了面板");
        setVisible(true);
        setSize(420, 200);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }

    public static void main(String[] args) {
        new JPanelTest();
    }
}

    运行结果为 :

Java核心(Swing 程序设计3-常用面板、按钮组件)_第1张图片

    首先设置整个窗体的布局为 2 行 1 列的网格布局,然后先后定义 4 个面板,分别为 4 个面板设置网格布局,当然,行列数会有所不同,将按钮放置在每个面板中,最后将面板添加至容器中。

    1.2 JScrollPane 面板

    在设置界面时,可能遇到在一个较小的容器窗体中显示一个较大部分的内容的情况,这时可以使用 JScrollPane 面板。JScrollPane 面板是带滚动条的mianb,它也是一种容器,但是 JScrollPane 只能放置一个组件,并且不可以使用布局管理器。如果需要在 JScrollPane 面板中放置多个组件,需要将多个组件放置在 JPanel 面板上,然后将 JPanel 面板作为一个整体组件添加到 JScrollPane 组件上。

    eg 1.2  在项目中创建 JScrollPaneTest 类,该类继承 JFrame 类称为窗体组件,在类中创建 JScrollPane 滚动面板组件,该滚动面板组件包含了 JTextArea 文本域组件。

package com.SwingDemo;

import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class JScrollPaneTest extends JFrame {
    public JScrollPaneTest() {
        Container container = getContentPane();        // 创建容器
        JTextArea tArea = new JTextArea(20, 50);        // 创建文本区域组件
        JScrollPane jPane = new JScrollPane(tArea);        // 创建 JScrollPane 面板对象
        container.add(jPane);        // 将该面板添加到该容器中
        setTitle("带滚动条的文字编译器");
        setSize(200, 200);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }

    public static void main(String[] args) {
        new JScrollPaneTest();
    }
}

    运行结果为 :

Java核心(Swing 程序设计3-常用面板、按钮组件)_第2张图片

    在窗体中创建一个带滚动条的文字编译器,首先需要初始化编译器(在 Swing 中编译器类为 JTextArea 类),并在初始化时指定编译器的大小完成。当创建带滚动条的面板时,需将编译器加入面板中,最后将带滚动条的编译放置在容器中即可。

二、按钮组件

    按钮在 Swing 中是较为常见的组件,用于触发特定动作。 Swing 中提供多种按钮,包括提交按钮、复选框、单选框等,这些按钮都是从  AbstractButton 类中继承而来的。

    2.1 提交按钮组件

    Swing 中的提交按钮(JButton)由 JButton 对象表示,其构造方法主要有以下几种 :

    ( 1 )  : public JButton() 。

    ( 2 )  :public JButton(String text) 。

    ( 3 )  :public JButton(Icon icon) 。

    ( 4 )  :public JButton(String text , Icon icon) 。

    通过使用上述构造方法,在 Swing 按钮上不仅能显示文本标签,还可以显示图标。上述构造方法中的第一个构造方法可以生成不带任何文本组件的对象和图标,可以在以后使用相应方法为按钮设置指定的文本和图标;其他构造方法堵都在初始化时指定了按钮上显示的图标或文字。

    eg 2.1  在项目中新建 JButtonTest 类,该类继承 JFrame 类称为窗体组件,在该窗体中创建按钮组件,并为按钮设置图标,添加动作监听器。

package com.SwingDemo;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;

public class JButtonTest extends JFrame {
    public JButtonTest() {
        Icon icon = new ImageIcon("E:\\JAVA\\eclipse-workspace\\JavaDemo\\src\\com\\SwingDemo\\imageButtoo.jpg");
        setLayout(new GridLayout(3, 2, 5, 5));        // 设置网格布局管理器
        Container container = getContentPane();        // 创建容器
        for (int i = 0; i < 5; i++) {
            // 创建按钮,同时设置按钮文字与图标
            JButton j = new JButton("button" + i, icon);
            container.add(j);        // 在容器中添加按钮
            if (i % 2 == 0) {
                j.setEnabled(false);        // 设置一些按钮不可用
            }
        }
    JButton jButton = new JButton();        // 实例化一个没有文字与图标的按钮
    jButton.setMaximumSize(new Dimension(90, 30));        // 设置按钮与图片相同大小
    jButton.setIcon(icon);        // 为按钮设置图片
    jButton.setHideActionText(true);
    jButton.setToolTipText("图片按钮");        // 设置按钮提示文字
    jButton.setBorderPainted(false);        // 设置按钮边界不显示
    jButton.addActionListener(new ActionListener() {        // 为按钮添加监听事件
        @Override
        public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(null, "弹出对话框");        // 弹出确认对话框
        }
    });
    container.add(jButton);
    setTitle("创建带文字与图片的按钮");
    setVisible(true);
    setSize(350, 150);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }

    public static void main(String[] args) {
        new JButtonTest();
    }
}

    运行结果为 :

Java核心(Swing 程序设计3-常用面板、按钮组件)_第3张图片      Java核心(Swing 程序设计3-常用面板、按钮组件)_第4张图片

    使用了两种方式创建按钮 :第一种方式是在初始化按钮时赋予按钮图标与文字;另一种方式是首先创建创建一个没有定义图标与文字的按钮对象,然后使用 setIcon 方法为这个按钮定制一个图标,其中 setToolTipText() 方法是为按钮设置提示文字,setBorderPainted() 方法设置按钮边界是否显示。最后为该按钮定制了一个鼠标单击事件,实现当用户单机该按钮时弹出提示对话框的功能。使用  setMaximumSize()  方法设置按钮的大小与图标的大小一致,该方法需要的参数类型为 Dimension 类对象,这样看上去次图标就如同按钮一样摆放在窗体中,同时也可以使用 setEnabled() 方法设置按钮是否可用。

    2.2 单选按钮组件

    在默认情况下,单选按钮(JRadioButton)显示一个圆形图标,并且通常在该图标旁放置一些说明性文字,而在应用程序中,一般将多个单选按钮放置在按钮组中,使这些单选按钮表现出某些功能,当用户选中某个单选按钮后,按钮组中其他按钮将被自动取消。单选按钮是 Swing 组件中 JRadioButton 类的对象,该类是 JToggleButton 的子类,而 JToggleButton 类又是 AbstractButton 类的子类,所以控制单选按钮的的诸多方法都是 AbstractButton 类中的方法。

    2.2.1  单选按钮

    可以使用 JRadioButton 类中的构造方法创建单选按钮对象。JRadioButton 类的常用构造方法主要有以下几种形式。

    ( 1 ) :public JRadioButton() 。

    ( 2 ) :public JRadioButton(Icon icon) 。

    ( 3 ) :public JRadioButton(Icon icon , boolean selected) 。

    ( 4 ) :public JRadioButton(String text) 。

    ( 5 ) :public JRadioButton(String text , Icon icon) 。

    ( 6 ) :public JRadioButton(String text , Icon icon , boolean selected) 。

    初始化单选按钮时,可以同时设置单选按钮的图标、文字以及默认是否被选中等属性。

    2.2.2 按钮组

    在 Swing 中存在一个 ButtonGroup 类,用于产生按钮组,如果过希望将所有的单选按钮放置在按钮组中,需要实例化一个 JRadioButton 对象,并使用该对象调用  add() 方法添加单选按钮。

    eg 2.2.2  在应用程序窗体中定义一个单选按钮组。

JRadioButton jr1 = new JRadioButton();
JRadioButton jr2 = new JRadioButton();
JRadioButton jr3 = new JRadioButton();
ButtoGroup group = new ButtonGroup();
group.add(jr1);
group.add(jr2);
group.add(jr3);
    2.3 复选框组件

    复选框(JCheckBox)在 Swing 组件中的使用也非常广泛,它具有一个方块图标,外加一段描述性文字。与单选按钮唯一不同的是,复选框可以进行多选设置,每一个复选框都提供“选中”与“不选中”两种状态。复选框用 JCheckBox 类的对象表示,它同样继承与 AbstractButton 类,所以复选框组件的属性设置也来源于 AbstractButton 类。

    JCheckBox 的常用构造方法如下 : 

    ( 1 ) :public JCheckBox() 。

    ( 2 ) :public JCheckBox(Icon icon , Boolean checked) 。

    ( 3 ) :public JCheckBox(String text , Icon icon , Boolean checked) 。

    eg 2.3 在项目中创建 CheckBoxTest 类,该类继承 JFrame 类称为窗体组件,在类中设置窗体使用 BorderLayout 布局管理器,为窗体添加多个复选框对象。

package com.SwingDemo;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class CheckBoxTest extends JFrame {
    private JPanel jPanel1 = new JPanel();
    private JPanel jPanel2 = new JPanel();
    private JTextArea jTextArea = new JTextArea(3, 10);
    private JCheckBox jBox1 = new JCheckBox("1");
    private JCheckBox jBox2 = new JCheckBox("2");
    private JCheckBox jBox3 = new JCheckBox("3");

    public CheckBoxTest() {
        Container container = getContentPane();
        setSize(200, 160);
        setVisible(true);
        setTitle("复选框的使用");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        container.setLayout(new BorderLayout());

        container.add(jPanel1, BorderLayout.NORTH);
        final JScrollPane jScrollPane = new JScrollPane(jTextArea);
        jPanel1.add(jScrollPane);

        container.add(jPanel2, BorderLayout.SOUTH);
        jPanel2.add(jBox1);
        jBox1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (jBox1.isSelected()) {
                    jTextArea.append("复选框 1 被选中\n");
                }
            }
        });
		
        jPanel2.add(jBox2);
        jBox2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (jBox2.isSelected()) {
                    jTextArea.append("复选框 2 被选中\n");
                }
            }
        });

        jPanel2.add(jBox3);
        jBox3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (jBox3.isSelected()) {
                    jTextArea.append("复选框 3 被选中\n");
                }
            }
        });
    }

    public static void main(String[] args) {
        new CheckBoxTest();
    }
}

    运行结果为 :

Java核心(Swing 程序设计3-常用面板、按钮组件)_第5张图片       Java核心(Swing 程序设计3-常用面板、按钮组件)_第6张图片

    窗体使用了边界布局管理器,将编译器放置在面板中置于窗体的最北端,同时将 3 个复选框放置在面板中置于窗体的最南端。使用 JCheckBox 类中的构造方法实例化 3 个复选框对象,将这 3 个复选框放置在面板中,分别为这 3 个复选框设置监听事件,当用户选中某个复选框时,相应文本框将显示相关内容,这里使用的是 JTextArea 类中的 append() 方法为文本域添加文字。


  

你可能感兴趣的:(Java)