Java 两个类的一个ActionListener

Java 两个类的一个ActionListener,java,swing,Java,Swing,我有两个带有JPanel的类,其中一个包含JTextField和JButton。我想在一个JTextField中写一些东西,然后按JButton在另一个jpanelsjtextfield中打印它 我尽了最大努力,创建了这段代码,它没有显示任何错误,但它没有做我想要的。谁能告诉我为什么以及如何修复它 公共类RevenuesPanel扩展JPanel实现ActionListener{ 公共财政收入; 公共场所; 公共图书馆; 公共按钮保存; 公共收入面板(){ 订单(新标题边界(“收入”); Fl

我有两个带有JPanel的类,其中一个包含JTextField和JButton。我想在一个JTextField中写一些东西,然后按JButton在另一个jpanelsjtextfield中打印它

我尽了最大努力,创建了这段代码,它没有显示任何错误,但它没有做我想要的。谁能告诉我为什么以及如何修复它


公共类RevenuesPanel扩展JPanel实现ActionListener{
公共财政收入;
公共场所;
公共图书馆;
公共按钮保存;
公共收入面板(){
订单(新标题边界(“收入”);
FlowLayout管理器=新建FlowLayout();
设置布局(经理);
JLabel lRevenues=新的JLabel(“收入:”);
添加(LRE);
这个.tfRevenues=newjtextfield(10);
加上(本条第3款);
JButton save=新JButton(“save”);
save.addActionListener(新的ResultPanel());
这个。添加(保存);
setVisible(真);
}
已执行的公共无效操作(操作事件e)
{
srevices=tfRevenues.getText();
}
公共静态字符串getRevenues(){
返回场馆;
}
}
公共类ResultPanel扩展JPanel实现ActionListener{
公共JTextField字段;
公共字符串结果;
公共结果面板(){
FlowLayout管理器=新建FlowLayout();
设置布局(经理);
收尾顺序(新标题边界(“结果”));
字段=新的JTextField(10);
添加(字段);
setVisible(假);
}
已执行的公共无效操作(操作事件e)
{
结果=RevenuesPanel.getRevenues();
field.setText(String.valueOf(result));
}
}

未调用RevenuesPanel中的actionListener。尝试在ResultPanel中创建一个方法,例如:

public static void addTextToTextField() {

result = RevenuesPanel.getRevenues();

// You don't need String.valueOf() because result is a String.
field.setText(result);

}
然后从RevenuesPanel调用第一个actionListener,在“保存”按钮上添加RevenuesPanel actionListener。

您的问题是:

save.addActionListener(new ResultPanel());
是的,您正在将ResultPanel侦听器添加到“保存”按钮,是的(与其他答案所述相反),正在调用它,但它是错误的ResultPanel--它是一个新的侦听器,而不是正在显示的侦听器

成功的一种方法是添加显示为按钮操作侦听器的实际ResultsPanel,而不是创建两个不同的ResultsPanel,一个显示,一个用作侦听器。这将取决于您在何处创建实际显示的ResultsPanel

我会给你的
RevenuesPanel
一个公共方法,比如

public void addSaveListener(ActionListener listener) {
    save.addActioniListener(listener);
}
然后通过调用此方法将显示的ResultsPanel传递到显示的RevenuesPanel中

此外,这:

public void actionPerformed(ActionEvent e) {
    result = RevenuesPanel.getRevenues();
    field.setText(String.valueOf(result));
}
public static String sRevenues;
看起来是个问题,因为您似乎试图使用
RevenuesPanel.getRevenues()调用RevenuesPanel类的静态方法

同样,要使其工作,您需要有显示的
RevenuesPanel
的实际实例,并在该实例上调用实例方法

此外,这:

public void actionPerformed(ActionEvent e) {
    result = RevenuesPanel.getRevenues();
    field.setText(String.valueOf(result));
}
public static String sRevenues;
这是错误的。除了main方法之外,这里不应该使用任何静态方法

e、 g


非常感谢,很抱歉提出了明显的问题。addSaveListener必须在main中吗?我有一个类主机,在这里我连接所有面板和单独的类主机
class ResultPanel extends JPanel {
    private JTextField resultField = new JTextField(5);

    public ResultPanel() {
        setBorder(new TitledBorder("Results"));
        add(new JLabel("Results:"));
        add(resultField);
        resultField.setFocusable(false);
    }
    
    public void setRevenues(String revenues) {
        resultField.setText(revenues);
    }
}