java - 来自另一个类的 JButton 的 ActionListener 未触发
问题描述
我的主类有一个静态 CardLayout JPanel,其中包括 Home 类的一个 JPanel。
import java.awt.*;
import javax.swing.*;
public class Runner1 extends JPanel{
public Runner1() {
initComponents();
}
private void initComponents() {
setLayout(new CardLayout());
pnlHome = new Home();
pnlSignIn = new SignIn();
add(pnlHome, "Home");
add(pnlSignIn, "SignIn");
}
public static void showJPanel(String s) {
CardLayout cl = (CardLayout) (pnlRunner.getLayout());
cl.show(pnlRunner, s);
}
public static void createAndShowGUI(){
pnlRunner = new Runner1();
JFrame frame = new JFrame();
frame.setTitle("Delivery System");
frame.setSize(new Dimension(500, 400));
frame.getContentPane().add(pnlRunner);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
public static Runner1 pnlRunner;
private JPanel pnlHome;
private JPanel pnlSignIn;
}
我的另一个类,其中 JButton 的动作侦听器没有被触发,在调试时,btnNewOrderActionPerformed 没有被执行。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Home extends JPanel {
public Home() {
initComponents();
}
private void initComponents(){
setLayout(new BorderLayout());
add(new TextArea("Active Orders"),BorderLayout.CENTER);
JButton btnNewOrder1 = new JButton("New Order");
btnNewOrder1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
btnNewOrderActionPerformed(e);
}
});
add(btnNewOrder1, BorderLayout.PAGE_END);
}
private void btnNewOrderActionPerformed(ActionEvent e){
System.out.println("test");
}
private OrderMap[] JOrders; //Lists of JPanel of orders
private JButton btnNewOrder;
}
关于 CardLayout JPanel 的静态实现的另一个问题,是否有一种非静态的方式来完成相同的事情(显示的 JPanel 可以由外部类的组件控制)?
解决方案
我的另一个类,其中 JButton 的动作侦听器没有被触发
在修复代码以便编译之后,对我来说工作正常。请参阅您最初问题的评论。
是否有一种非静态的方式来完成同样的事情(显示的 JPanel 可以由外部类的组件控制)?
首先,去掉方法上的 static 关键字。
然后你有几个选择:
- 将 Runner1 类的引用传递给每个子面板。
- 在子面板中,您可以使用该
getParent()
方法获取对 Runner1 类的引用。
一旦有了引用,您就可以引用 Runner1 类中的任何方法。
推荐阅读
- javascript - 如何使用 nodejs 和 node-fetch 从 Azure 为 Microsoft Graph 获取客户端令牌
- python - 如何从气流中 xcom_pull 一个 return_value 并作为字典传递?
- python - win32con win32gui PyQt5 焦点问题
- wordpress - .mov 没有在 iOS 上专门在 HTML5 视频中播放
- python - 这样的声明有什么作用?
- python - PipelineException:在输入中找不到 mask_token ([MASK])
- sql - 仅显示每家商店利润最高的日期
- javascript - 更漂亮的 shell 脚本格式
- javascript - 使用 gatsbyJs 进行 SEO 的动态页面
- java - TypedQuery 错误“未设置所有命名参数”。JPA/休眠