Java 让JButton开始工作

Java 让JButton开始工作,java,swing,actionlistener,Java,Swing,Actionlistener,现在我在计算器上有一些按钮,但它们没有设置。我不知道如何让他们在单击时在JTextField中打印内容。我知道您需要使用ActionListener,但我似乎无法让它工作。谢谢你的帮助 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator extends JPanel implements ActionListener { private JTextField tf =

现在我在计算器上有一些按钮,但它们没有设置。我不知道如何让他们在单击时在JTextField中打印内容。我知道您需要使用ActionListener,但我似乎无法让它工作。谢谢你的帮助

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

public class Calculator extends JPanel implements ActionListener {
private JTextField tf = null;
private JButton[] arrBtn = null;
private String[] btnNames = { "1", "2", "3", "4", "5", "6", "7", "CE", "-", "+", "/", "%", "*", "=" };
private JPanel jp = new JPanel();
private char op = ' ';
private int num1 = 0;
private int num2 = 0;
private int result = 0;
private boolean isOpPressed = false;
private JPanel btnPl;

public Calculator() {
    super();

    jp = new JPanel();
    jp.setLayout(new GridLayout(3, 3));
    btnPl = new JPanel();
    btnPl.setLayout(new GridLayout(4, 4));

    jp.add(new JTextField());
    jp.add(new JTextField());
    jp.add(new JTextField());
    jp.add(new JTextField());
    jp.add(new JTextField());
    jp.add(new JTextField());

    arrBtn = new JButton[btnNames.length];

    for (int i = 0; i < arrBtn.length; i++) {
        arrBtn[i] = new JButton(btnNames[i]);
        arrBtn[i].addActionListener(this);
        btnPl.add(arrBtn[i]);
    }

    this.setLayout(new BorderLayout());
    this.add(jp, BorderLayout.NORTH);
    this.add(btnPl, BorderLayout.CENTER);
}

public void actionPerformed(ActionEvent e) {

}

public static void main(String args[]) {
    new Calculator();
    JFrame frame = new JFrame("Calculator");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    RomanCalculator cal = new RomanCalculator();
    frame.add(cal);
    frame.pack();
    frame.setSize(500, 500);
    frame.setVisible(true);

}

}

在java中,我通常使用的方法是使用一个内部类来处理按钮单击

public x extends JFrame(){
//I like to store my buttons in an array if possible. 
JButton [] buttonArray =  new JButton [2];

//instantialize each of the arrays buttons
buttonArray[0] = new JButton("hello");
buttonArray[1] = new JButton("world");

//create a listener of type buttonpress (currently undefined)
buttonPress Listener = new buttonPress();

//attach the button action listeners to the listener I created above.
buttonArray[0].addActionListener(Listener);
buttonArray[1].addActionListener(Listener);

//Create a private inner class called "buttonPress" which will handle the clicks for its listeners
private class buttonPress implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == buttonArray[0]){
            try
            {
                ..some logic                
            }
            catch (Exception e1)
            {
                JOptionPane.showMessageDialog(null, e1.getMessage());
            }
        }
        else if( e.getSource() == buttonArray[1])
        { 
            ...some other logic     
        }
    }

}//close inner class
}//close outer class

我建议先看看,然后

下面是创建新文本字段的方法

JTextField textField = new JTextField();
然后,您应该创建一个与此类似的按钮和操作侦听器

JButton someBtn = new JButton("Some Text");
someBtn.addActionListener(this);
你的行动完成了

@Override
public void actionPerformed(ActionEvent e) {
    textField.setText("New Text");
}
如果您想继续使用jbutton数组的方法,我建议您做类似的事情

String[] btnNames = {"1", "2", "3", etc.};
JButton[] allBtns = new JButton[10];
for(int i = 0; i < 10; i++){
    allBtns[i] = new JButton(btnNames[i]);
    allBtns[i].addActionListener(this);
    //Using the previous actionPerformed
}

查看以了解更多信息。

从和如何编写操作侦听器开始]。您可以使用ActionEventgetActionCommand获取按钮的文本..但我似乎无法使其工作。那么public void actionPerformedActionEvent e{}在哪里尝试让它们工作?你的问题是什么?目前的问题似乎是‘你能完成我的计划吗?’,尽管我们能,但我们不会。没有人要求你完成任何事情。我在学习。我不知道把这些东西放在哪里,这就是我问的原因。但是,谢谢你是个混蛋!好吧,上面的那个部分让一切变得容易多了,因为它让人弄不清楚应该把什么东西放进盒子里。您是否知道如何将单击按钮时消失的文本放在框顶部。例如,在左上角的框中,它会显示Num1,一旦单击它,Num1就会消失?您的意思是要将textfield中的文本设置为nothing?或者您想要完全不同的东西,例如显示Num1的a?可能是JLABLE。我想让我的六个盒子中的每一个都说些不同的话。就像方框一可以说Num1,方框二可以说Num2。但一旦点击一个框,Num1文本就会被按下的按钮所取代。例如,如果有人按1作为第一个按钮。Num1将被类似1I的硬编码按钮所取代,这使我更容易看到发生了什么。请查看Lambda的链接以获取相关信息:
anyBtn.addActionListener(e -> textField.setText("Anything"));