Java 如何启用命令按钮

Java 如何启用命令按钮,java,swing,events,jbutton,Java,Swing,Events,Jbutton,我在java swing程序中使用了3个命令按钮,如读取、停止和退出。 如果单击“读取”按钮,则在读取文件之前,所有3个按钮都不会处于启用状态。 如果我单击“停止”按钮,我需要您的帮助来创建这些按钮以启用和停止阅读操作。请注意,Swing是一个构建在多线程平台之上的单线程框架。 因此,在执行长时间运行的任务时,不应使用 希望Swing已经包含了执行如此长时间运行的工作所需的所有内容 创建一个单独的线程来读取您的文件 完成后,调用方法根据文件内容刷新UI 请注意,Swing是构建在多线程平台之上的

我在java swing程序中使用了3个命令按钮,如读取、停止和退出。 如果单击“读取”按钮,则在读取文件之前,所有3个按钮都不会处于启用状态。
如果我单击“停止”按钮,我需要您的帮助来创建这些按钮以启用和停止阅读操作。

请注意,Swing是一个构建在多线程平台之上的单线程框架。 因此,在执行长时间运行的任务时,不应使用

希望Swing已经包含了执行如此长时间运行的工作所需的所有内容

  • 创建一个单独的线程来读取您的文件
  • 完成后,调用方法根据文件内容刷新UI

  • 请注意,Swing是构建在多线程平台之上的单线程框架。 因此,在执行长时间运行的任务时,不应使用

    希望Swing已经包含了执行如此长时间运行的工作所需的所有内容

  • 创建一个单独的线程来读取您的文件
  • 完成后,调用方法根据文件内容刷新UI

  • 对于“读取”按钮,对于像这样的ex set操作:

    private void ReadButtonActionPerformed(java.awt.event.ActionEvent evt) {
           ReadButton.setEnabled(false);
           StopButton.setEnabled(false);
           ExitButton.setEnabled(false);
        }
    
    private void StopButtonActionPerformed(java.awt.event.ActionEvent evt) {
           ReadButton.setEnabled(true);
           StopButton.setEnabled(true);
           ExitButton.setEnabled(true);
        }
    
    对于停止按钮:设置如下操作:

    private void ReadButtonActionPerformed(java.awt.event.ActionEvent evt) {
           ReadButton.setEnabled(false);
           StopButton.setEnabled(false);
           ExitButton.setEnabled(false);
        }
    
    private void StopButtonActionPerformed(java.awt.event.ActionEvent evt) {
           ReadButton.setEnabled(true);
           StopButton.setEnabled(true);
           ExitButton.setEnabled(true);
        }
    
    要停止阅读操作,请执行以下操作: 将读取操作设为线程(在读取按钮中),然后在(停止按钮)中停止此线程

    例如:

    class Read extends Thread {
    
        public void run() {
        //////////////Read action
    }
    }
    
    • 读取=新读取()

    • 然后在ReadButtonActionPerformed:read.start()

    • 在StopButtonActionPerformed中:读取.stop()


    对于读取按钮,对于像这样的预设操作:

    private void ReadButtonActionPerformed(java.awt.event.ActionEvent evt) {
           ReadButton.setEnabled(false);
           StopButton.setEnabled(false);
           ExitButton.setEnabled(false);
        }
    
    private void StopButtonActionPerformed(java.awt.event.ActionEvent evt) {
           ReadButton.setEnabled(true);
           StopButton.setEnabled(true);
           ExitButton.setEnabled(true);
        }
    
    对于停止按钮:设置如下操作:

    private void ReadButtonActionPerformed(java.awt.event.ActionEvent evt) {
           ReadButton.setEnabled(false);
           StopButton.setEnabled(false);
           ExitButton.setEnabled(false);
        }
    
    private void StopButtonActionPerformed(java.awt.event.ActionEvent evt) {
           ReadButton.setEnabled(true);
           StopButton.setEnabled(true);
           ExitButton.setEnabled(true);
        }
    
    要停止阅读操作,请执行以下操作: 将读取操作设为线程(在读取按钮中),然后在(停止按钮)中停止此线程

    例如:

    class Read extends Thread {
    
        public void run() {
        //////////////Read action
    }
    }
    
    • 读取=新读取()

    • 然后在ReadButtonActionPerformed:read.start()

    • 在StopButtonActionPerformed中:读取.stop()

    用于此操作。读取文件时,禁用按钮,完成文件后,启用按钮。一个简单的例子展示了它是如何工作的

    导入java.awt.BorderLayout;
    导入java.awt.event.ActionEvent;
    导入java.awt.event.ActionListener;
    导入javax.swing.JButton;
    导入javax.swing.JDialog;
    导入javax.swing.JFrame;
    导入javax.swing.JLabel;
    导入javax.swing.JPanel;
    导入javax.swing.JProgressBar;
    导入javax.swing.SwingWorker;
    公共类易货测试{
    私有静态最终长serialVersionUID=1L;
    私有静态JProgressBar progressBar;
    公共静态void main(字符串[]args){
    invokeLater(新的Runnable(){
    @凌驾
    公开募捐{
    MyProgressBarTest obj=新的MyProgressBarTest();
    obj.createGUI();
    }
    });
    }
    public void createGUI(){
    最终JFrame=新JFrame();
    JPanel面板=新的JPanel();
    最终JButton按钮=新JButton(“进度”);
    progressBar=新的JProgressBar();
    addActionListener(新建ActionListener()){
    @凌驾
    已执行的公共无效操作(操作事件arg0){
    MyCustomProgressBarDialog progressBarObj=新的MyCustomProgressBarDialog(progressBar,框架);
    progressBarObj.createProgressUI();
    MyActionPerformer actionObj=新的MyActionPerformer(progressBar、progressBarObj、按钮);
    actionObj.execute();
    }
    });
    面板。添加(按钮);
    框架。添加(面板);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(空);
    框架设置尺寸(200300);
    frame.setVisible(true);
    }
    }
    类MyActionPerformer扩展SwingWorker{
    JProgressBar fProgressBar;
    MyCustomProgressBarDialog progressDialog;
    按钮;
    公共MyActionPerformer(JProgressBar progressBar、MyCustomProgressBarDialog progressDialog、JButton按钮){
    this.fProgressBar=progressBar;
    此.fProgressBar.setVisible(true);
    此.fProgressBar.setUndeterminate(true);
    this.button=按钮;
    this.progressDialog=progressDialog;
    此.button.setEnabled(错误);
    }
    受保护的字符串doInBackground()引发异常{
    calculateResult();
    返回“完成”;
    }
    受保护的void done(){
    fProgressBar.setVisible(假);
    this.progressDialog.setVisible(false);
    此.button.setEnabled(真);
    }
    public void calculateResult(){
    对于(int i=0;i<500000;i++){
    System.out.println(“进度条:+i”);
    }
    }
    }
    类MyCustomProgressBarDialog扩展了JDialog{
    私有静态最终长serialVersionUID=1L;
    私有静态JProgressBar progressBar;
    私有JFrame主机框架;
    专用JLabel标签=新JLabel(“加载”);
    私人按钮;
    公共MyCustomProgressBarDialog(JProgressBar progressBar,JFrame){
    this.progressBar=progressBar;
    this.motherFrame=frame;
    this.button=按钮;
    }
    public void createProgressUI(){
    添加(标签,边框布局。北);
    添加(progressBar、BorderLayout.CENTER);
    设置大小(50,40);
    setAlwaysOnTop(真);
    setLocationRelativeTo(主机架);
    未装饰的设置(真实);
    setVisible(真);
    }
    }
    
    MyActionPerformer类扩展了
    SwingWorker
    ,它已经
    done
    doInBackGround
    。在
    doInBackGround
    方法中读取文件,并在完成后在
    done
    方法中启用按钮。单击
    JButton
    时,我正在调用一个名为
    calculate
    的方法。

    用于执行此操作。在读取文件时,请禁用按钮,并在完成