如何修改来自不同类的JTextfield的文本?(Java)



我正在尝试制作一个计算器作为练习(我在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"));

最新更新