3

如果单击按钮,我将如何获得它当前所在的 JPanel?

我知道如何制作按钮并添加动作监听器并进行事件处理。我不知道如何选择当前面板。

4

3 回答 3

4

修改了上面帖子中的代码以避免使用最终变量

public void buildUI() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JButton button = new JButton("Button");
panel.add(button);
button.addActionListener( new ActionListener() {

    public void actionPerformed(ActionEvent e) {
        System.out.println("The current panel is " + ((JButton)e.getComponent()).getParent());
    }

});
frame.add(panel);
frame.pack();
frame.setDefaultCloseBehavior(JFrame.CLOSE_ON_EXIT);
frame.setVisible(true);
}
于 2013-04-24T12:32:25.233 回答
2
public void buildUI() {
    JFrame frame = new JFrame();
    final JPanel panel = new JPanel();
    JButton button = new JButton("Button");
    panel.add(button);
    button.addActionListener( new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            System.out.println("The current panel is " + panel);
        }

    });
    frame.add(panel);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

编辑:添加侦听器代码与 GUI 代码不在同一类中的示例。

//PanelPrintingListener.java
public class PanelPrintingListener implements ActionListener {

    private JPanel panel;

    public PanelPrintingListener(JPanel panel) {
        this.panel = panel;
    }

    public void actionPerformed(ActionEvent e) {
        System.out.println("The current panel is " + panel);
    }

}

//OtherFoo.java
public void buildUI() {
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    JButton button = new JButton("Button");
    panel.add(button);
    button.addActionListener( new PanelPrintingListener(panel) );
    frame.add(panel);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
于 2013-04-24T12:29:16.627 回答
0

如果您正在寻找当前处于活动状态的面板(意味着它是堆栈中的顶部面板),那么您可以使用 getComponent() 方法。

    Component active = parentPanel.getComponent(0);

现在“活动”对象将具有当前活动或显示的面板。请注意,“父面板”是放置所需子面板的面板。

于 2017-03-13T06:58:51.833 回答