java - 如何检查是否在另一个 Jframe 中单击了按钮
问题描述
所以我有两个简单的 jframe,一个是主框架,另一个只有在按下按钮时才可见。
我现在要做的是显示在第二个 jframe中按下了哪个按钮,无论是第一个 jframe 的 jlabel 中的玩具还是食物。
第一个 jframe 中的按钮启动选择将链接到第二个 jframe,然后用户单击两个按钮中的一个,被单击的按钮将显示在jlabel中,例如“Toy button was clicked”
我实现了两个 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 中按下了哪个按钮时遇到了问题。
解决方案
这是一个单文件 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);
}
}
推荐阅读
- c++ - 为什么我不能在这个 for 循环之外访问这些值?
- javascript - 在 Facebook 聊天插件中动态更新 div 参数
- multithreading - 为什么我在多线程 scala 中出现竞争条件?
- java - 您好,我尝试将数据库中的字符串值转换为 int,但没有发生
- mysql - 从nodejs连接Mysql时出错
- python - numpy 数组中的大索引产生错误
- c - C - 套接字编程 - 任意发送/接收 - 指针算术 - 数组不可分配
- github - 将 PurgeCss 与 Laravelmix 和 PostCss 一起使用
- python - 从循环中并行调用python方法
- python-3.x - from pyftpdlib.handlers import FTPHandler, handler = FTPHandler 这个实例化是如何工作的?