對於你原來的問題:
如何添加動作按鈕?
你可能想檢查How to write an Action Listener。
關於第二個問題:
現在我想進入另一個JFrame的我做了,而且做的第一消失。怎麼樣?
請檢查這兩種方法:)
選項1(推薦)
如果你想要做正確的方式,你應該使用一個CardLayout
在上面他comment建議@AndrewThompson。
我也看到你使用的是空佈局(因爲setBounds()
方法),你可能也想擺脫它,請參閱Why is it frowned upon to use a null layout in Swing?和Null Layout is Evil知道爲什麼,insted的你應該使用作爲他們的Layout Manager或組合在下面的代碼中顯示,基於@ AndrewThompson的answer(與他上面評論中相同),但有點修改與JFrame
而不是JOptionPane
一起使用,所以通過提高他的原始答案來給他信任!
這將產生以下輸出:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class CardLayoutDemo {
JButton button1, button2;
CardLayoutDemo() {
JFrame gui = new JFrame("CardLayoutDemo");
button1 = new JButton("Go to pane 2");
button2 = new JButton("Go to pane 1");
JPanel pane1 = new JPanel();
pane1.setLayout(new BoxLayout(pane1, BoxLayout.PAGE_AXIS));
JPanel pane2 = new JPanel();
pane2.setLayout(new BoxLayout(pane2, BoxLayout.PAGE_AXIS));
final CardLayout cl = new CardLayout();
final JPanel cards = new JPanel(cl);
pane1.add(new JLabel("This is my pane 1"));
pane1.add(button1);
pane2.add(new JLabel("This is my pane 2"));
pane2.add(button2);
gui.add(cards);
cards.add(pane1, "frame1");
cards.add(pane2, "frame2");
ActionListener al = new ActionListener(){
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == button1) {
cl.show(cards, "frame2");
} else if (ae.getSource() == button2) {
cl.show(cards, "frame1");
}
}
};
button1.addActionListener(al);
button2.addActionListener(al);
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.pack();
gui.setVisible(true);
}
public static void main(String[] args) {
new CardLayoutDemo();
}
}
使用這個選項,只有1 JFrame
,但你可以通過不同的看法改變了,你不要騷擾與多個Windows用戶任務欄。
一個提示這裏是:如果你要打開這個第二JFrame
,以防止用戶從一日一做的事情,你應該考慮使用JOptionPane
或第二個JFrame
將僅包含一個比特的信息,你不要我不想一直呆在那裏(就像彈出一樣)。
選項2(不推薦)
但如果你真的真的真的想使用多個JFrame
秒(這是not recommended),您可以dispose()
它。當時你打電話給你的新的JFrame
被創建。例如,下面的代碼產生這樣的輸出:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TwoJFrames {
JFrame frame;
JButton button;
TwoJFrames() {
frame = new JFrame("1st frame");
button = new JButton("Click me!");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new AnotherFrame();
frame.dispose();
}
});
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String args[]) {
new TwoJFrames();
}
class AnotherFrame {
JFrame frame2;
JLabel label;
AnotherFrame() {
frame2 = new JFrame("Second Frame");
label = new JLabel("This is my second frame");
frame2.add(label);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.pack();
frame2.setVisible(true);
}
}
}
在這種情況下,你可能要考慮setVisible()
,而是如果你想回到以前的狀態或重新打開這一個關閉第二時JFrame
我上面的代碼都稱之爲一個Minimal, Complete, and Verifiable example (MCVE)或Runnable的實例或Short, Self Contained, Correct Example (SSCCE)這是代碼,你可以複製粘貼,看到了同樣的輸出爲我,當你的代碼有錯時,這些例子非常方便,因爲我們可以看到你的錯誤在哪裏,或者能夠更容易和/或更快地找到它們。
您應該考慮閱讀所有我所提供的鏈接(包括這些的),併爲你的未來的問題,使像我之前所做的那樣,這樣就能避免混亂,你會得到更多,更快,更好響應。
[打開一個新的JFrame並點擊按鈕後關閉前一個](http://stackoverflow.com/questions/28860914/opening-a-new-jframe-and-close-previous-after-clicking-button ) – ArcticLord
請解釋你真正想要的。你想隱藏/處理顯示按鈕的幀,它已經開始了操作? –
*「現在我想進入另一個JFrame的我做了,使第一消失。」 * 1)請參見[多個JFrames,好/壞習慣的用?(http://stackoverflow.com/q/9554636/418556 )2)代替利用['CardLayout'](http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html),如圖[此答案](HTTP:// stackoverflow.com/a/5786005/418556)。 3)爲了更快地獲得更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –