Java中GUI程序的编写离不开Swing和AWT编程。
二者的区别和联系:

AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。
Swing :为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。
AWT的图形函数与操作系统提供的图形函数有着一一对应的关系。当我们利用 AWT构件图形用户界面的时候,实际上是在利用操作系统的图形库。AWT是依靠本地方法来实现功能的,所以AWT控件称为“重量级控件”。 而Swing ,不仅提供了AWT 的所有功能,还用纯粹的Java代码对AWT的功能进行了大幅度的扩充。由于 Swing是用纯粹的Java代码来实现的,因此Swing控件在各平台通用。因为Swing不使用本地方法,故Swing控件称为“轻量级控件”。

Swing组件包含JFrame, JApplet, JDialog和JWindow等容器,我们简单地学习下JFrame的基本使用。
使用:

继承JFrame类,初始化窗口,添加按钮、显示框、文本框等,设置大小、设置可见、设置字体、添加响应事件,将容器JFrame实例设置为可见。

代码如下:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class myFrame extends JFrame {

    private static final long serialVersionUID = 1L;
    static String path = null;

    public static void main(final String[] args) {

        // 画出窗口
        final JFrame frame = new myFrame();
        frame.setLayout(null);
        frame.setTitle("myFrame");
        frame.setSize(400, 170);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 添加按钮
        final JButton btn1 = new JButton("浏览");
        final JButton btn2 = new JButton("确定");
        btn1.setBounds(80, 70, 60, 25);
        btn2.setBounds(240, 70, 60, 25);
        btn1.setVisible(true);
        btn2.setVisible(true);
        frame.add(btn1);
        frame.add(btn2);

        // 设置字体
        final Font font = new Font("宋体", Font.BOLD, 11);
        btn1.setFont(font);
        btn2.setFont(font);

        // 添加显示框
        final JLabel label = new JLabel("路径:");
        label.setBounds(60, 20, 50, 25);
        label.setVisible(true);
        label.setFont(font);
        frame.add(label);

        // 添加文本框
        final JTextField textField = new JTextField();
        textField.setBounds(120, 20, 190, 22);
        textField.setVisible(true);
        frame.add(textField);
        frame.setVisible(true);

        // 为按钮添加事件
        btn1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(final ActionEvent e) {
                final JFileChooser chooser = new JFileChooser();
                chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                final int returnVal = chooser.showOpenDialog(btn1);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    final File file = chooser.getSelectedFile();
                    path = file.getAbsolutePath();
                    textField.setText(path);
                }
            }
        });

        btn2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                final myFrame myFrame = new myFrame();
                myFrame.addInfo(path);
            }
        });

        // 为文本框添加事件
        textField.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                if (new File(textField.getText()).isDirectory()) {
                    path = textField.getText();
                } else {
                    final myFrame myFrame = new myFrame();
                    myFrame.addInfo("路径名错误");
                }

            }
        });
    }

    public void addInfo(final String string) {
        final JFrame f = new JFrame("提示");
        f.setLayout(null);
        f.setBounds(40, 40, 300, 100);
        f.setVisible(true);
        final JLabel label = new JLabel(string);
        label.setBounds(30, 20, 250, 20);
        final Font f1 = new Font("宋体", Font.BOLD, 12);
        label.setFont(f1);
        f.add(label);

    }
}
测试:
  • 通过文本框输入错误路径并回车:

这里写图片描述

  • 通过选择框选择正确路径:

这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐