Java 让JButton开始工作
现在我在计算器上有一些按钮,但它们没有设置。我不知道如何让他们在单击时在JTextField中打印内容。我知道您需要使用ActionListener,但我似乎无法让它工作。谢谢你的帮助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 =
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"));