【问题标题】:Java Button FunctionsJava 按钮功能
【发布时间】:2016-07-04 01:38:41
【问题描述】:

这是我第一次设计 GUI,我相信这可能是一个简单的问题。我试图让程序在使用System.exit(0) 按下取消按钮时关闭,但我不确定将它放在我的代码中的哪个位置。我必须创建一个单独的方法吗?我可以在我的ActionPreformed 方法中实现它吗?

//importing required packages
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.*;

//implements ActionListener
public class primecalc implements ActionListener{

    public static void main(String[] args) throws Exception {

        //create object instance
        primecalc p= new primecalc();
    }

    private JTextField Calculate,Value;
    private JButton calculateb,cancelb;
    private JLabel l1,l2;
    private JFrame frame;

    public primecalc()
    {
        //Desiging GUI
        Calculate = new JTextField(30);
        Value = new JTextField(30);
        l1 = new JLabel("Prime Number Calculator");
        calculateb = new JButton("Calculate");
        calculateb.addActionListener(this);//button performs specific action
        cancelb = new JButton("Cancel");
        cancelb.addActionListener(this);//button performs specific action

        //layout
        JPanel north = new JPanel(new GridLayout(3,2));
        north.add(new JLabel("Enter a number: "));
        north.add(Calculate);
        north.add(new JLabel("Result: "));
        north.add(Value);
        north.add(calculateb);
        north.add(cancelb);

        //frame
        JFrame frame = new JFrame("Prime Number Calculator");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.add(north,BorderLayout.NORTH);
        frame.pack();
        frame.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent event)//buttons action is performed here
    { 
        String input =Calculate.getText();
        int n1;
        boolean Prime;
        try{
            n1=Integer.parseInt(input);
            Prime=true;
            for(int i=2;i<n1;i++){
                if((n1 % i) == 0){
                    Prime=false;
                    break;
                }
            }
            if(n1==1 || n1==0){
                Prime=false;  
            }
            if(Prime){
                Value.setText("This is a prime number.");              
            }else{
                Value.setText("This is not a prime number.");              
            }
        }catch(NumberFormatException nfe){
            Value.setText("The input is invalid, please try again.");
        }
    }
}

【问题讨论】:

标签: java swing user-interface button


【解决方案1】:

你需要检查事件的来源,然后决定做什么。

@Override
public void actionPerformed(ActionEvent event) {
    if (event.getSource() == cancelb) {
        System.exit(0);
    }
    // you continue your code from here

使用这种方法,您只需要测试哪个按钮启动了事件。

【讨论】:

    【解决方案2】:
    cancelb.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
              doSomething()....
              System.Exit(0);
            }
          });
    

    【讨论】:

    • 对于 java 8,你仍然可以把它变成一个 lambda:arg0 -&gt; { doSomething(); System.Exit(0); }
    【解决方案3】:

    这样做,

    @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals("Cancel")){
                    System.exit(0);
            }   
    
        }
    

    【讨论】:

      【解决方案4】:

      为每个按钮使用不同的匿名 ActionListener

              // Designing GUI
              calculate = new JTextField(30);
              value     = new JTextField(30);
      
              l1 = new JLabel("Prime Number Calculator");     
      
              ActionListener calculatebListener = new ActionListener() {
      
                      @Override
                      public void actionPerformed(ActionEvent e) {
                           // Paste your code here
                      }
              };
      
              calculateb = new JButton("Calculate");
              calculateb.addActionListener(calculatebListener);
      
      
              ActionListener cancelbListener = new ActionListener() {
      
                   @Override
                   public void actionPerformed(ActionEvent e) {
                         System.exit(0);
                    }
              };
      
              cancelb = new JButton("Cancel");
              cancelb.addActionListener(cancelbListener);
              ...
      

      【讨论】:

        【解决方案5】:

        为了您的目的,我建议您只需在按钮上添加 MouseListenerMouseAdapter

        myButton.addMouseListener(new MouseAdapter() {
             @Override
             public void mousePressed(MouseEvent e) {
                System.exit(0);
             }
          });
        

        【讨论】:

        • 为此目的在按钮上使用MouseListener 是不合适的。按钮支持ActionListeners 正是为了这个目的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-22
        • 2018-04-30
        • 2018-08-15
        • 2020-04-03
        相关资源
        最近更新 更多