gpt4 book ai didi

java - 来自另一个类的 JButton Action 监听器

转载 作者:行者123 更新时间:2023-12-01 11:49:09 24 4
gpt4 key购买 nike

我正在处理 JButton 事件。我有一个 JPanel 类,我们称之为 Panel1,其中包含一个公共(public) JButton,我们称之为 Button1。单击此按钮时:

//Inside Panel1
Button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("1")
}
});

从另一个 JPanel 类中,我们将其称为 Panel2,其中包含 Panel1,我必须处理“Button1 Pressed”事件。

//Inside Panel2
Panel1.Button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("2")
}
});

得到的结果是:

2
1

但我有兴趣:

1
2

有什么建议吗?

最佳答案

如果将 ActionListener 添加到 JButton,则无法保证它们触发的顺序,并且知道添加顺序并不能保证有帮助。解决此问题的一种方法是使用 ActionListener 更改对象的状态,然后监听该状态。这将保证 ActionListener 首先触发。

例如,使用 PropertyChangeListener 作为第二个监听器:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.*;

public class ActionOrder extends JPanel {
ButtonPanel buttonPanel = new ButtonPanel();
OtherPanel otherPanel = new OtherPanel();

public ActionOrder() {
add(buttonPanel);
add(otherPanel);

buttonPanel.addPropertyChangeListener(ButtonPanel.PRESSED, new PropertyChangeListener() {

@Override
public void propertyChange(PropertyChangeEvent evt) {
otherPanel.appendText("Button 1 Pressed");
}
});
}

private static void createAndShowGui() {
ActionOrder mainPanel = new ActionOrder();

JFrame frame = new JFrame("ActionOrder");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}


class ButtonPanel extends JPanel {
public static final String PRESSED = "pressed";
private JButton button1 = new JButton("Button 1");

public ButtonPanel() {
add(button1);
button1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
System.out.println("1");
firePropertyChange(PRESSED, null, PRESSED);
}
});

setBorder(BorderFactory.createTitledBorder("Button Panel"));
}
}

class OtherPanel extends JPanel {
private JTextArea textArea = new JTextArea(10, 20);

public OtherPanel() {
add(new JScrollPane(textArea));
setBorder(BorderFactory.createTitledBorder("Other Panel"));
}

public void appendText(String text) {
textArea.append(text + "\n");
System.out.println("2");
System.out.println();
}
}

关于java - 来自另一个类的 JButton Action 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28920525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com