[英]ActionListener for JButton from another class not triggering
我的主要 class 帶有 static CardLayout JPanel,其中包括來自 Home class 的 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;
}
我的另一個 class 沒有觸發 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 的 static 實現的另一個問題,是否有一種非靜態的方式來完成同樣的事情(顯示的 JPanel 可以由外部類的組件控制)?
我的其他 class JButton 的動作監聽器沒有被觸發
在修復代碼以便編譯之后,對我來說工作正常。 請參閱您最初問題的評論。
是否有一種非靜態的方式來完成同樣的事情(顯示的 JPanel 可以由外部類的組件控制)?
首先,去掉方法上的 static 關鍵字。
然后你有幾個選擇:
getParent()
方法獲取對 Runner1 class 的引用。獲得參考后,您可以參考 Runner1 class 中的任何方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.