2016-01-06 135 views
-1

我試圖爲JButon進入一個事件,我創建:如何將動作添加到按鈕?

JButton botton1=new JButton("welcom to my show db! lets start"); 
    botton1.setFont(new Font ("Eras Medium ITC",Font.BOLD,20)); 
    this.add(botton1); 

    JPanel Basic_panel=new JPanel(); 
    Basic_panel.setName("SHOW DB "); 
    Basic_panel.setBounds(x,y,width,hight); 

    botton1.addActionListener(this) ; 
} 
      public void actionPerformed(ActionEvent e) { 
       if (e.getSource()==botton1){ 

現在我想進入另一個JFrame我做了,使第一消失。怎麼樣?

+0

[打開一個新的JFrame並點擊按鈕後關閉前一個](http://stackoverflow.com/questions/28860914/opening-a-new-jframe-and-close-previous-after-clicking-button ) – ArcticLord

+1

請解釋你真正想要的。你想隱藏/處理顯示按鈕的幀,它已經開始了操作? –

+2

*「現在我想進入另一個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/)。 –

回答

3

對於你原來的問題:

如何添加動作按鈕?

你可能想檢查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一起使用,所以通過提高他的原始答案來給他信任!

這將產生以下輸出:

enter image description hereenter image description here

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被創建。例如,下面的代碼產生這樣的輸出:

enter image description hereenter image description here

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)這是代碼,你可以複製粘貼,看到了同樣的輸出爲我,當你的代碼有錯時,這些例子非常方便,因爲我們可以看到你的錯誤在哪裏,或者能夠更容易和/或更快地找到它們。

您應該考慮閱讀所有我所提供的鏈接(包括這些的),併爲你的未來的問題,使像我之前所做的那樣,這樣就能避免混亂,你會得到更多,更快,更好響應。

+0

謝謝你,我沒有axactaly作爲選項1..its好。不過,爲什麼當我tryed保存fram2爲私有中的第一個,並調用它在它沒有工作??和方法,只有當我稱之爲新的一個 ? – DANA

+0

還有一個問題..我正好添加圖片文件??我在哪裏把它保存在Java ecalipse? – DANA

+0

這是另一個問題,你應該問另一個問題。但在此之前,你應該[谷歌一下](https://www.google.com.mx/search?client=ubuntu&channel=fs&q=eclipse+java+import+image&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=8kaNVrmQMvKosATp6ZCACQ)和第一個結果會引導你[這個問題](http://stackoverflow.com/questions/5657469/how-do-i-go-about-adding-an-image-into-a-java-project-with-蝕)。如果你沒有在谷歌上找到它,那麼只有這樣,你可以在這裏問你試過的東西,而不是倒退。 – Frakcool