我正在尝试制作一个计算器作为练习(我在Java方面很差(,但现在我面临着一个无法解决的问题。我有一个带有CardLayout的框架,其中一张卡片上有一个JTextfield。我在主课上做了文本字段:JTextField textfield = new JTextField();
,并用它做了一些事情:
textfield.setBounds(50, 130, 380, 60);
textfield.setEditable(false);
textfield.setFont(font);
现在,我想修改来自另一个类(使计算器工作(的文本字段上的文本:main.textfield.setText(main.textfield.getText() + "ans");
,但这不起作用。我正在尝试修改ActionPerformed方法中的文本。有人知道我做错了什么吗?
我试着通过主类中的一个方法来完成这项工作,并重新绘制和验证框架和面板,但都不起作用。
@DanielJunglas要求提供更多信息,所以我们开始:p。我将所有可能对我的问题产生影响的代码。
frame.setBounds(700, 250, 500, 700);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setResizable(false);
contPanel.setLayout(cards); //set the cardlayout to the container panel
contPanel.setBounds(0, 0, 500, 700);
createBegPanel(); //creating the panels
createNorPanel();
createTriPanel();
//createEquPanel();
contPanel.add(beginPanel, "p1");
contPanel.add(normalCalcPanel, "p2");
contPanel.add(triCalcPanel, "p3");
//contPanel.add(equCalcPanel, "p4");
cards.show(contPanel, "p1");
frame.add(contPanel);
frame.setVisible(true);
public void createNorPanel() { //these are the things i do with the textfield
textfield.setBounds(50, 130, 380, 60);
textfield.setEditable(false);
textfield.setFont(font);
public void actionPerformed(ActionEvent e) {
JButton source = (JButton)e.getSource();
main.textfield.setText("test");
因此,按下任何按钮,都应该将文本字段的文本设置为"text",但它没有。这些信息足够吗?
提前感谢!
我想您永远不会调用actionPerformed
。
如果您有一个按钮,那么您需要向它添加一个实现方法actionPerformed(ActionEvent e)
的ActionListener
。
看起来您有一个实现ActionListener
的类(这通常不是一个好的解决方案(。在这种情况下,您必须将this
作为ActionListener
添加到按钮中。
JButton b = new JButton();
b.addActionListener(this);
更好的解决方案是为每个按钮添加一个单独的ActionListener
。
JButton b = new JButton();
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
main.textfield.setText("test");
}
});
ActionListener
是一个函数接口(它只有一个方法(,这意味着您也可以使用Lambda表达式。
b.addActionListener(e -> main.textfield.setText("test"));