在Java中工作:我有一個JFrame
類,併爲我的兩個JPanels
添加了JFrame
的單獨類。其中一個JPanel
類有一些按鈕,它們可以相互交互(當我點擊一個按鈕時,它可以禁用另一個按鈕)。然而,我不知道如何讓按鈕調用另一個JPanel
(寫在一個單獨的類)的方法。在多個類中的Java按鈕操作
所以,我的計劃是這樣的:
的JFrame
- JPANEL1
- Jpanel2 - 這個類有我的按鈕在裏面,我試圖讓他們與JPANEL1對象交互。
任何提示讚賞,謝謝!
在Java中工作:我有一個JFrame
類,併爲我的兩個JPanels
添加了JFrame
的單獨類。其中一個JPanel
類有一些按鈕,它們可以相互交互(當我點擊一個按鈕時,它可以禁用另一個按鈕)。然而,我不知道如何讓按鈕調用另一個JPanel
(寫在一個單獨的類)的方法。在多個類中的Java按鈕操作
所以,我的計劃是這樣的:
的JFrame
任何提示讚賞,謝謝!
這樣做的一種方法是將Jpanel1的實例(使用您的術語)Jpanel1傳遞給Jpanel2。這不必在構造函數中完成,例如,可以有一個setConnectedPanel(JPanel)
方法。
下面是一些代碼,演示了你想做的事:
MyFrame.java
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame {
public MyFrame() {
ReactionPanel rp = new ReactionPanel();
ActionPanel ap = new ActionPanel(rp);
setLayout(new GridLayout(2, 1));
add(ap);
add(rp);
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MyFrame();
}
});
}
}
ActionPanel.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class ActionPanel extends JPanel implements ActionListener {
private ReactionPanel rp;
private JButton button;
public ActionPanel(ReactionPanel rp) {
this.rp = rp;
button = new JButton("Click");
button.addActionListener(this);
this.add(button);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(button)) {
rp.react();
}
}
}
ReactionPanel.java
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ReactionPanel extends JPanel {
private JLabel label;
public ReactionPanel() {
label = new JLabel("PING");
this.add(label);
}
public void react() {
if(label.getText().equals("PING")) {
label.setText("PONG");
} else {
label.setText("PING");
}
}
}
正如你所看到的,當我編寫Swing GUI時,我傾向於覆蓋所有的JFrames/JPanels,因爲我發現它更容易,更靈活,但是YMMV。
謝謝!這完美地回答了我的問題! – Zargontapel 2012-02-14 02:31:37
不用擔心。如果它完全回答你的問題,你應該點擊這個答案旁邊的綠色勾號。 :) – Catchwa 2012-02-14 03:23:04
顯示你的代碼會很有用。發佈[SSCCE](http://sscce.org)會更好。 – Jeffrey 2012-02-14 01:29:11
你可能不應該有1個'JFrame'和2個'JPanel' *類* * *個* *(標準組件)。此外,它會支付使您的類/實例名稱不太抽象,因爲面板1可能是'userDetails',面板2可能是'userControls',這使我們更好地瞭解最終目標是什麼,從而更好地提供最佳建議的機會。 – 2012-02-14 02:07:26