【问题标题】:How to check if a button is clicked in another Jframe如何检查是否在另一个 Jframe 中单击了按钮
【发布时间】:2019-05-11 05:22:41
【问题描述】:

所以我有两个简单的jframe,一个是主框架,另一个只有在按下按钮时才可见。

我现在要做的是在第二个jframe显示正在按下的按钮,无论是第一个jframe的jlabel中的玩具还是食物.

第一个jframe中的按钮启动选择会链接到第二个jframe,然后用户点击两个按钮中的一个,被点击的按钮会显示在jlabel中,如“玩具按钮被点击”

我实现了两个 jframe 的链接方式:

class SelectionListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        Object_Selection object_select = new Object_Selection(); //launch the second jframe
        object_select.setVisible(true);
    }
}

但是我在显示第一个 jframe 的 jlabel 中的第二个 jframe 中按下了哪个按钮时遇到了问题。

【问题讨论】:

  • 您需要将ActionListener 添加到ToyFood 按钮。或者,您是否考虑过使用JOptionPane 而不是第二个JFrame
  • @Abra 我计划在第二个 jframe 中添加更多元素,例如图片、描述和其他内容,所以我应该使用 jframe。
  • 1) 为了尽快获得更好的帮助,edit 添加minimal reproducible exampleShort, Self Contained, Correct Example。 2) 参见The Use of Multiple JFrames, Good/Bad Practice?第二个“框架”应该是JOptionPane,它提供了两种选择。
  • 你可以在 fmain JFrame 中有一个ActionListener 类,例如:class ToyListener implements ActionListener 并将它的引用发送到第二个JFrameObject_Selection object_select = new Object_Selection(new ToyListener())
  • 做什么?发帖minimal reproducible example 让帮助更轻松。

标签: java swing


【解决方案1】:

这里是一个单文件 mcve(将整个代码复制粘贴到一个文件 OpenDialogWindow.java,然后运行)演示您想要实现的目标:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class OpenDialogWindow {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Main Window");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(400,250);
        frame.add(new Pane());
        frame.pack();
        frame.setVisible(true);
    }
}

class Pane extends JPanel{

    private static int WIDTH = 300, HEIGHT = 100, GAP  = 5;
    private final JLabel label;

    Pane() {
        setPreferredSize(new Dimension(WIDTH, HEIGHT));
        setLayout(new BorderLayout(GAP,GAP));

        label = new JLabel("", JLabel.CENTER);
        add(label, BorderLayout.PAGE_START);

        JButton show = new JButton("Show Dialog");
        show.addActionListener(e-> new Diag(new DiagButtonListener()));
        add(show, BorderLayout.PAGE_END);
    }

    class DiagButtonListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            label.setText("Diag button clicked !");
        }
    }
}

class Diag extends JDialog  {

    public  Diag(ActionListener listener) {

        setTitle("Dialog window");
        setSize(300, 150);
        setLocation(450,400);

        JButton btn = new JButton("Click");
        btn.addActionListener(listener);

        add(btn, BorderLayout.NORTH);

        JLabel help = new JLabel("Click button and see parent frame updted", JLabel.CENTER);
        add(help, BorderLayout.SOUTH);
        setVisible(true);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 2014-04-09
    相关资源
    最近更新 更多