page contents

Java教程——Java使用Swing触发菜单事件

本文讲述了Java教程——Java使用Swing触发菜单事件!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2023-10-4GPSPbHG653f49714485c.jpg本文讲述了Java教程——Java使用Swing触发菜单事件!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

在Java中,菜单是一种常见的用户界面元素,用于提供用户与程序交互的选项。当用户选择菜单中的某个选项时,需要触发相应的事件执行相应的操作。本文将介绍如何使用Java编写菜单触发事件的代码,并提供示例代码进行演示。

2. 创建菜单

在Java中,可以使用Swing或JavaFX库来创建菜单。其中,Swing是Java标准库中的一部分,而JavaFX是JavaFX库的一部分。下面分别介绍如何使用Swing和JavaFX创建菜单。

2.1 使用Swing创建菜单

使用Swing创建菜单的步骤如下:

导入必要的类:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

创建菜单栏、菜单和菜单项:

JFrame frame = new JFrame("Menu Example");

JMenuBar menuBar = new JMenuBar();

JMenu menu = new JMenu("File");

JMenuItem menuItem1 = new JMenuItem("Open");

JMenuItem menuItem2 = new JMenuItem("Save");

将菜单项添加到菜单中,并将菜单添加到菜单栏中:

menu.add(menuItem1);

menu.add(menuItem2);

menuBar.add(menu);

将菜单栏设置到窗口中:

frame.setJMenuBar(menuBar);

2.2 使用JavaFX创建菜单

使用JavaFX创建菜单的步骤如下:

导入必要的类:

import javafx.application.Application;

import javafx.event.ActionEvent;

import javafx.event.EventHandler;

import javafx.scene.Scene;

import javafx.scene.control.*;

import javafx.scene.layout.BorderPane;

import javafx.stage.Stage;

创建菜单栏、菜单和菜单项:

Stage primaryStage = new Stage();

BorderPane root = new BorderPane();

MenuBar menuBar = new MenuBar();

Menu menu = new Menu("File");

MenuItem menuItem1 = new MenuItem("Open");

MenuItem menuItem2 = new MenuItem("Save");

将菜单项添加到菜单中,并将菜单添加到菜单栏中:

menu.getItems().addAll(menuItem1, menuItem2);

menuBar.getMenus().add(menu);

将菜单栏设置到场景中:

root.setTop(menuBar);

primaryStage.setScene(new Scene(root, 400, 300));

3. 触发菜单事件

在菜单中的每个菜单项上添加事件监听器,以便在用户选择菜单项时执行相应的操作。下面分别介绍如何使用Swing和JavaFX触发菜单事件。

3.1 使用Swing触发菜单事件

使用Swing触发菜单事件的步骤如下:

创建事件监听器类,实现ActionListener接口,并重写actionPerformed方法:

class OpenActionListener implements ActionListener {

    public void actionPerformed(ActionEvent e) {

        // 处理Open菜单项的事件

        System.out.println("Open menu item clicked");

    }

}

class SaveActionListener implements ActionListener {

    public void actionPerformed(ActionEvent e) {

        // 处理Save菜单项的事件

        System.out.println("Save menu item clicked");

    }

}

将事件监听器添加到相应的菜单项:

menuItem1.addActionListener(new OpenActionListener());

menuItem2.addActionListener(new SaveActionListener());

3.2 使用JavaFX触发菜单事件

使用JavaFX触发菜单事件的步骤如下:

创建事件处理类,实现EventHandler<ActionEvent>接口,并重写handle方法:

class OpenEventHandler implements EventHandler<ActionEvent> {

    public void handle(ActionEvent event) {

        // 处理Open菜单项的事件

        System.out.println("Open menu item clicked");

    }

}

class SaveEventHandler implements EventHandler<ActionEvent> {

    public void handle(ActionEvent event) {

        // 处理Save菜单项的事件

        System.out.println("Save menu item clicked");

    }

}

将事件处理类添加到相应的菜单项:

menuItem1.setOnAction(new OpenEventHandler());

menuItem2.setOnAction(new SaveEventHandler());

attachments-2023-10-aUB8vi7H653f48ec4e558.jpg

Java Swing 窗体文件选择

在Swing体系中有文件选择器和颜色选择器,它们分别用来帮助用户选择文件和颜色,这些选择操作是可视化桌面应用程序常用的操作,本小节将详细讲解这两种选择器的使用方式。

20.8.1文件选择器JFileChooser

文件选择器用于选择文件或文件夹。当用户打开一个文件时需要用文件选择器选择一个文件,而保存文件时又需要用文件选择器去选择一个文件夹。Swing体系用JFileChooser类来表示文件选择器。通常情况下,文件选择器都是以一个模态对话框的形式出现。

JFileChooser有一个无参数的构造方法,使用这个构造方法创建对象的语句是:

JFileChooser fileChooser = new JFileChooser();

使用以上语句所创建的fileChooser对象会以系统默认的路径打开文件选择器,程序员也可以在构造方法中指定了文件选择器的打开路径,例如:

JFileChooser fileChooser = new JFileChooser("D:/");

使用以上语句所创建的ileChooser对象会以D盘根目录打开文件选择器。

弹出选择文件的模态对话框的方法被定义在JFileChooser类中,它们分别是showOpenDialog()、showSaveDialog()和showDialog()。showOpenDialog()方法所弹出的对话框上标题和按钮的文本都是“打开”,而showSaveDialog()方法所弹出的对话框上标题和按钮的文本都是“保存”。使用showDialog()方法则可以自定义对话框上的标题和按钮文本。以上三个方法的返回值均为int型,这个返回值表示了用户在对话框上点击了那个按钮。如果用户点击了“打开”或“保存”按钮,在方法的返回值为0,一般以JFileChooser类的静态属性APPROVE_OPTION表示这个返回值,而用户如果点击的是“取消”按钮,则方法的返回值为1,一般以JFileChooser类的静态属性APPROVE_OPTION表示这个返回值。

JFileChooser可以通过为setFileSelectionMode()方法传递不同的参数来文件选择器指定只能打开文件还是只能打开文件夹或是二者都能打开,setFileSelectionMode()方法的参数一般以JFileChooser类的静态属性表示,如表20-18所示。

表20-18 选择模式静态属性意义

FILES_ONLY只能打开文件

DIRECTORIES_ONLY只能打开文件夹

FILES_AND_DIRECTORIES文件和文件夹都能打开

文件选择器还可以设置是否可以同时选中多个文件或文件夹,默认情况下在文件选择器对话框中只能选中一个文件或文件夹,如果调用了JFileChooser类对象的setMultiSelectionEnabled()方法并为其传递true为参数,则可以设置文件选择器可以同时选中多个文件或文件夹。

当用户选择了一个文件和文件夹后,通过调用JFileChooser类定义的getSelectedFile()方法就能获得被选中的文件或文件夹。而如果用户同时选择了多个文件或文件夹,则可以调用getSelectedFiles()方法来获得这些文件或文件夹,getSelectedFiles()方法的返回值是File数组。下面的【例20_27】展示了如何弹出一个文件选择器,并把用户所选择的文件名称显示到文本框中。

【例20_27 JFileChooser的使用】

Exam20_27.java

import java.awt.*;

import java.awt.event.*;

import java.io.File;

import javax.swing.*;

class Exam20_27Frame extends JFrame{

    JButton btnOpen,btnSave,btnSelect;

    JTextField txtOpen,txtSave,txtSelect;

    public Exam20_27Frame(){

        init();

    }

    private void init( ){

        Container container = this.getContentPane();//获得窗体的主体区域

        container.setLayout(null);

        btnOpen = new JButton("打开");

        btnSave = new JButton("保存");

        btnSelect = new JButton("选择");

        txtOpen = new JTextField();

        txtSave = new JTextField();

        txtSelect = new JTextField();

        txtOpen.setSize(350, 30);

        txtOpen.setLocation(30, 30);

        txtOpen.setFont(new Font("微软雅黑", Font.PLAIN, 18));

        btnOpen.setSize(80, 30);

        btnOpen.setLocation(400, 30);

        btnOpen.setFont(new Font("微软雅黑", Font.PLAIN, 18));

        btnOpen.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                JFileChooser fileChooser = new JFileChooser("D:/");

                fileChooser.setMultiSelectionEnabled(true);

                fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

                int option = fileChooser.showOpenDialog(Exam20_27Frame.this);

                if(option==JFileChooser.APPROVE_OPTION){

                    File[] files = fileChooser.getSelectedFiles();

                    String fileNames = "";

                    for(int i=0;i<files.length;i++){

                        fileNames = fileNames+files[i].getAbsolutePath()+";";

                    }

                    txtOpen.setText(fileNames);

                }else{

                    txtOpen.setText("");

                }

            }

        });

        txtSave.setSize(350, 30);

        txtSave.setLocation(30, 90);

        txtSave.setFont(new Font("微软雅黑", Font.PLAIN, 18));

        btnSave.setSize(80, 30);

        btnSave.setLocation(400, 90);

        btnSave.setFont(new Font("微软雅黑", Font.PLAIN, 18));

        btnSave.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                JFileChooser fileChooser = new JFileChooser();

                int option = fileChooser.showSaveDialog(Exam20_27Frame.this);

                if(option==JFileChooser.APPROVE_OPTION){

                    File file = fileChooser.getSelectedFile();

                    String fileName = file.getAbsolutePath();

                    txtSave.setText(fileName);

                }else{

                    txtSave.setText("");

                }

            }

        });

        txtSelect.setSize(350, 30);

        txtSelect.setLocation(30, 150);

        txtSelect.setFont(new Font("微软雅黑", Font.PLAIN, 18));

        btnSelect.setSize(80, 30);

        btnSelect.setLocation(400, 150);

        btnSelect.setFont(new Font("微软雅黑", Font.PLAIN, 18));

        btnSelect.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                JFileChooser fileChooser = new JFileChooser();

                int option = fileChooser.showDialog(Exam20_27Frame.this, "选择");

                if(option==JFileChooser.APPROVE_OPTION){

                    File file = fileChooser.getSelectedFile();

                    String fileName = file.getAbsolutePath();

                    txtSelect.setText(fileName);

                }else{

                    txtSelect.setText("");

                }

            }

        });

        container.add(btnOpen);

        container.add(btnSave);

        container.add(btnSelect);

        container.add(txtOpen);

        container.add(txtSave);

        container.add(txtSelect);

    }

}

public class Exam20_27 {

    public static void main(String[] args) {

        Exam20_27Frame frame = new Exam20_27Frame();

        frame.setSize(550, 250);

        frame.setLocationRelativeTo(null);

        frame.setTitle("Exam20_26Frame");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

    }

}

在图20-28所示的窗体上单击任意一个按钮都能弹出一个文件选择对话框,当选中一个文件后,文件的路径就会出现在对应的文本框中。

20.8.2颜色选择器JColorChooser

Swing体系用JColorChooser类表示颜色选择器。JColorChooser如同JoptionPane,只需要通过静态方法就能打开一个颜色选择器对话框。打开颜色选择器对话框的方法是showDialog(),它有两个重载版本,如表20-19所示。

表20-19 showDialog()方法

方法功能

showDialog(Component component,

String title, Color initialColor)

从component上打开颜色选择对话框,对话框标题是title,默认颜色是initialColor

Color showDialog(Component component, String title, Color initialColor, boolean colorTransparencySelectionEnabled)

从component上打开颜色选择对话框,对话框标题是title,默认颜色是initialColor,参数colorTransparencySelectionEnabled指定是否可以选择颜色的透明度

showDialog()方法的返回值类型是Color,它代表用户在颜色选择器上选择的颜色,如果用户点击的是颜色选择器的取消按钮,则showDialog方法()返回null。下面的【例20_28】展示了如何打开颜色选择器,以及如何获得用户所选择的颜色。

【例20_28 JColorChooser的使用】

Exam20_28.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

class Exam20_28Frame extends JFrame{

    JButton button;

    public Exam20_28Frame(){

        init();

   }

    private void init( ){

        Container container = this.getContentPane();

        container.setLayout(null);

        button = new JButton("颜色选择器");

        button.setSize(200, 40);

        button.setLocation(50,20);

        button.setFont(new Font("微软雅黑", Font.PLAIN, 20));

        button.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                //打开颜色选择器

                Color color = JColorChooser.showDialog(Exam20_28Frame.this,"颜色选择",Color.BLACK);

                System.out.println("所选择的颜色是:"+color);

            }

        });

        container.add(button);

    }

}

public class Exam20_28{

    public static void main(String[] args) {

        Exam20_28Frame frame = new Exam20_28Frame();

        frame.setSize(320, 150);

        frame.setLocationRelativeTo(null);

        frame.setTitle("Exam20_28Frame");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

    }

}

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2023-10-30 14:13
  • 阅读 ( 302 )
  • 分类:Java开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章