我正在处理JButton事件。我有一个JPanel类,我们叫Panel1,包含一个公共的JButton,我们叫它Button1。单击此按钮时:
//Inside Panel1
Button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("1")
}
});
//Inside Panel2
Panel1.Button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("2")
}
});
2
1
但我有兴趣:
1
2
有什么建议吗?
如果您将ActionListeners添加到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();
}
}
问题内容: 我有两个分别称为“左”和“右”。“左”按钮将矩形对象向左移动,“右”按钮将其向右移动。我在班上有一个充当单击任一按钮时的侦听器。但是,我希望单击每个动作时都会发生不同的动作。如何区分点击的? 问题答案: 将actionCommand设置到每个按钮。 //将动作命令设置到两个按钮上。 更新:
问题内容: 可能有两堂课,而在一堂课中 在另一个 //更多原因是因为我需要将按钮(摆动)分离到动作监听器 我该怎么办? 谢谢 问题答案: 不仅可以将这两个部分分开,而且还建议这样做(请参阅MVC模式-非常有关分离屏幕控件(如按钮)和程序逻辑) 我想到的最简单的方法是编写一个实现接口的命名类,如下所示: 然后将其添加到您的按钮:
导入javax.swing.*; class Labels extensions JFrame{ JPanel pnl = new JPanel(); } 如果我想将其用作JApplet怎么办?必须做什么?很难更改吗? JFrame上运行的东西和JApplet上的东西是一样的吗?
下面的代码是项目的动作侦听器。基本上,我有 4 个单选按钮,当我单击一个时,我希望它更改屏幕上的变量。当我运行代码时,它只是将所有值相加。还有其他方法可以做到这一点吗?
问题内容: 我怎样才能使它成为特定方法? (我知道可以用一种方法将其全部抛弃,是的。 谢谢你们, 编辑:谢谢大家的快速反应,我的解释不是很清楚。 我调查了lambda的使用,这几乎是我在想的,尽管其他方式也很不错。 再次谢谢大家。 下次我会尝试变得更清晰,更快捷。 问题答案: 同样,您的问题仍然不清楚。您上面的代码 有 一种方法,可以将代码放入其中: 或者,您可以从该方法中调用外部类的方法: 或者
需要帮助!关于Salesforce Apex计划课程的问题。 我需要从视觉力页面调用一个动作,该动作位于顶点类上。顶点类太长了,但动作完全从VF页面工作。 下面是代码的示例版本。但计划类不起作用,只需不断给出错误以保存即可。 VF页面 以下是我无法使用的代码: 任何人都知道如何从VF或Apex类调用操作