Swing 高级组件

三、JToolBar 工具栏

  • 工具栏中提供了快速执行常用命令的按钮,可固定在窗体某一位置也可自由拖动;如果想要工具栏可以自由拖动,那么窗体一定要采用默认的边界布局方式,并且不能在边界布局的四周添加任何组件。
  • 工具栏默认可以拖动,也可以通过方法 setFloatable(bool b) 并将入口参数设置为 false 来实现工具栏固定。
  • 工具栏(JToolBar)对象的常用构造方法如下:
    1)JToolBar():创建新的工具栏,默认方向为 HORIZONTAL,使用该方法创建的工具栏,当工具栏脱离窗体时,工具栏则没有标题。
    2)JToolBar(String name):创建具有指定标题的工具栏。
  • JToolBar 类的常用方法如下表:

方法

说明

add(Component comp)

将按钮添加到工具栏末尾

addSeparator()

在按钮之间添加默认大小的分隔符

addSeparator(Dimension size)

添加指定大小的分隔符

setMargin(Insets m)

设置工具栏边框和按钮之间的空白

setOrientation(int o)

设置工具栏的方向

  • 示例:
package 高级Swing组件;

// !/usr/bin/env jdk1.8
// encoding:utf-8
//@software:IntelliJ IDEA
//@pack:高级Swing组件
//@user:彭友聪
//@date:2019/08/07
//@time:下午 12:06
//@project:IDEA_JAVA
//@file:JToolBarTest.java
//Author:御承扬

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class JToolBarTest extends JFrame {
    private static class ButtonListener implements ActionListener{
        private ButtonListener() {
        }

        public final void actionPerformed(ActionEvent e) {
            JButton button = (JButton) e.getSource();
            System.out.println( "被单击的是:"+button.getText() );
        }
    }
    private JToolBarTest() {
        super();
        setTitle( "工具栏示例" );
        setBounds(100, 100, 500, 375);
        setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
        setVisible( true );
        final JToolBar toolBar = new JToolBar("工具栏");// 创建工具栏对象
        toolBar.setFloatable(true);// 设置为允许拖动
        getContentPane().add(toolBar, BorderLayout.NORTH);// 添加到网格布局的上方
        final JButton newButton = new JButton("新建");// 创建按钮对象
        newButton.addActionListener(new ButtonListener());// 添加动作事件监听器
        toolBar.add(newButton);// 添加到工具栏中
        toolBar.addSeparator();// 添加默认大小的分隔符
        final JButton saveButton = new JButton("保存");// 创建按钮对象
        saveButton.addActionListener(new ButtonListener());// 添加动作事件监听器
        toolBar.add(saveButton);// 添加到工具栏中
        toolBar.addSeparator(new Dimension(20, 0));// 添加指定大小的分隔符
        final JButton exitButton = new JButton("退出");// 创建按钮对象
        exitButton.addActionListener(new ButtonListener());// 添加动作事件监听器
        toolBar.add(exitButton);// 添加到工具栏中
    }

    public static void main(String[] args) {
        JToolBarTest frame = new JToolBarTest();
    }
}
  • 运行效果如下:

java rsa res工具栏 java工具栏怎么设计_工具栏

  • 控制台输出:
被单击的是:新建
被单击的是:保存
被单击的是:退出

四、文件选择器

  • 在从文件倒入数据、选择用户照片时,需要选择文件的操作,Swing 程序中使用 javax.swing.JFileChooser 类实现该功能。

1、JFileChooser 文件选择对话框

  • JFileChooser 提供了一个文件选择对话框,创建文件选择对话框和获取所选文件的步奏如下:
    1)创建一个 JFileChooser 类对象。
    2)通过 setMultiSelectionEnabled(boolean b) 函数设置是否支持同时选择多个文件,默认不支持(false),设为 true 后则支持文件多选。
    3)默认情况只允许选择文件,不允许选择文件夹,可通过 setFileSelectionMode(int mode) 方法设置,入口常数的可选静态变量有 FILES_ONLY(只允许选择文件)、DIRECTORIES_ONLY(只允许选择路径)和 FILES_AND_DIRECTORIES(均可选择)
    4)如果希望在对话框中只列出指定类型的文件,可调用方法 setFileFilter(FileFilter filter) 方法设置文件过滤器。
    5)设置完成后调用 showOpenDialog(Component parent) 方法显示对话框,方法返回一个用于确定是否选择了文件或路径的 int 型值。
    6)若用户选择了文件或路径,用 getSelectedFiles() 方法获取所选文件夹或用 getSelectedFile() 方法获得所选文件,因为前者返回的是一个 File 型数组,后者返回的是一个 File 型对象。
  • 示例:
package 高级Swing组件;

// !/usr/bin/env jdk1.8
// encoding:utf-8
//@software:IntelliJ IDEA
//@pack:高级Swing组件
//@user:彭友聪
//@date:2019/08/07
//@time:下午 8:25
//@project:IDEA_JAVA
//@file:JFileChooserTest.java
//Author:御承扬

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

public class JFileChooserTest extends JFrame {
    private JTextField textField;
    private JFileChooserTest() {
        super();
        setTitle("文件选择器对话框示例");
        setBounds(100,100,600,375);
        setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );

        final JPanel panel = new JPanel(  );
        getContentPane().add(panel, BorderLayout.NORTH );

        final JLabel label = new JLabel( "文件:" );
        panel.add(label);

        textField = new JTextField(  );
        textField.setColumns( 20 );
        panel.add(textField);
        final JButton button = new JButton( "上传" );
        button.addActionListener( new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser fileChooser = new JFileChooser(  );    // 创建文件选择对话框
                int i = fileChooser.showOpenDialog( getContentPane() );     // 显示文件选择对话框
                if(i == JFileChooser.APPROVE_OPTION){   // 判断用户单击的是否为“打开”按钮
                    File selectedFile = fileChooser.getSelectedFile();  // 获得选中的文件对象
                    textField.setText( selectedFile.getName() );    // 显示选中文件的名称
                }
            }
        } );
        panel.add( button );
    }

    public static void main(String[] args) {
        JFileChooserTest frame = new JFileChooserTest();
        frame.setVisible( true );
    }
}
  • 运行如下图:

java rsa res工具栏 java工具栏怎么设计_java_02

java rsa res工具栏 java工具栏怎么设计_java rsa res工具栏_03

2、FileFilter 文件过滤器

  • 文件过滤器用于筛选文件类型,从而快速获取自己想要的文件类型的文件,Java 中通过 javax.swing.filechooser.FileFilter 类实现,该类是一个抽象类,其具体定义如下:
public abstract class FileFilter {
		public abstract boolean accept(File f);
		public abstract String getDescription();
}
  • 其中,accept(File f) 用来过滤文件,返回 true 则表示显示到文件选择对话框中,反之则不显示;getDescription() 方法用来返回对话框中“文件类型”的描述信息。
  • FileFilter 抽象类提供了实现类:FileNameExtensionFilter,构造方法为:FileNameExtensionFilter(String description, String…extension) 构造方法,第一个参数为文件类型描述信息,其余为允许显示到文件选择对话框中的文件类型。
  • 示例
package 高级Swing组件;

// !/usr/bin/env jdk1.8
// encoding:utf-8
//@software:IntelliJ IDEA
//@pack:高级Swing组件
//@user:彭友聪
//@date:2019/08/08
//@time:上午 9:07
//@project:IDEA_JAVA
//@file:FileFilterTest.java
//Author:御承扬

import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;

public class FileFilterTest extends JFrame {
    private FileFilterTest(){
        super();
        setTitle( "选择照片对话框" );
        setBounds(100,100,500,375);
        setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );

        final JLabel label = new JLabel( "<双击选择照片>", SwingConstants.CENTER );
        label.addMouseListener( new MouseAdapter() {
            JFileChooser fileChooser;
            {
                fileChooser = new JFileChooser(  );
                // 设置文件过滤器,只列出JPG格式或GIF格式的图片
                FileFilter filter = new FileNameExtensionFilter( "图像文件(JPG/GIF)", "JPG", "GIF" );
                fileChooser.setFileFilter( filter );
            }
            @Override
            public void mouseClicked(MouseEvent e) {
                if(e.getClickCount() == 2) {
                    int i = fileChooser.showOpenDialog( getContentPane() );
                    if(i == JFileChooser.APPROVE_OPTION) {
                        File selectedFile = fileChooser.getSelectedFile();
                        label.setIcon( new ImageIcon( selectedFile.getAbsolutePath() ) );
                        label.setText( null );
                    }
                }
            }
        } );
        getContentPane().add(label, BorderLayout.CENTER );
    }

    public static void main(String[] args) {
        FileFilterTest frame = new FileFilterTest();
        frame.setVisible( true );
    }
}
  • 运行效果如下图:

java rsa res工具栏 java工具栏怎么设计_java rsa res工具栏_04

java rsa res工具栏 java工具栏怎么设计_工具栏_05