2013-08-20 32 views
2

我希望我的按鈕來運行一個全新的類,將裏面做不同的事情。我不知道這是否甚至可能,因爲我在java上真的很糟糕。我的代碼目前看起來像這樣:按鈕運行一個全新的類

public class MainMenu { 
    private class GardenActivities { 
     public GardenActivities() { 
      JFrame GardenAct = new JFrame(); 
      GardenAct.setSize(400, 400); 
      GardenAct.setVisible(true); 
     } 
    } 

    public static void main(String[] args) { 
     JFrame choice = new JFrame(); 
     choice.setSize(700, 500); 
     choice.setLocationRelativeTo(null); 
     choice.setTitle("Seeds"); 
     choice.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel();               
     panel.setLayout(new GridLayout(0, 1)); 
     JButton Labora = new JButton(); 
     Labora.setText("Laboratory"); 
     Labora.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent ev) { 
         GardenActivities(); 
       } 
     }); 

     JButton Garden = new JButton(); 
     Garden.setText("Garden"); 
     Garden.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent ev) { 
      } 
     }); 

     choice.getContentPane().add(panel); 
     ButtonGroup group = new ButtonGroup();            
     group.add(Garden); 
     group.add(Labora); 
     panel.add(Garden); 
     panel.add(Labora); 
     choice.setVisible(true); 
    } 
} 

就像我說的。我只需按Garden按鈕即可運行我的GardenActivities類。

+0

這幾乎是一樣的,你如何顯示在窗口中的主要方法,本質上只是複製粘貼代碼(相關顯示窗口),並把它在你的'ActionListener'。 –

+0

參見[使用多個JFrames,好/壞的做法嗎?](http://stackoverflow.com/a/9554657/418556) –

回答

7

您的代碼無法編譯,不是嗎?當發生這種情況時,您需要在您的問題中發佈編譯錯誤,以便我們可以幫助您解決問題。

您需要在GardenActivities()語句前添加關鍵字

@Override 
public void actionPerformed(ActionEvent ev) { 
    new GardenActivities(); // here 
} 

而且,把GardenActivities在它自己的文件。沒有理由讓它成爲一個私人內部課堂,也有許多理由不這樣做。

話雖如此,我建議不要有一個JFrame的創建和顯示其他的JFrame,因爲一個應用程序應該有通常只有一個JFrame的。請考慮使用CardLayout交換JPanel「視圖」,或者如果您必須顯示不同的窗口,請考慮將第二個從屬窗口顯示爲模態對話框或非模態對話框。

而且更不請自來的建議是:你的主要方法是做了太多。大多數靜態main方法內部的代碼應該去非靜態主GUI類,不管它是什麼,也許在它的構造函數或在initGui()方法的構造函數調用內。主要的方法應該只是創建一個主要的gui類的實例,使其可見,這就是它。


以及有關:

我不知道這甚至有可能因爲我是非常糟糕的是java。

繼續寫很多很多的代碼,噸代碼,並保留審查的教程和教材,而這會改變。

+0

+1 - 與保持GardenActivities在一個單獨的文件 –

3

一種方式做你想要什麼,我們做GardenActivities類實現ActionListener本身。

然後您的代碼會是這個樣子:

Garden.addActionListener(new GardenActivities()); 

否則,你的計劃應該工作。

注意

反對,爲什麼人會願意留在anonymouse內部類的ActionListener並將其調入GardenActivities意見詳見註釋。

謝謝@HovercraftFullOfEels

+0

除非你的建議,同意給予編寫程序的玩具,你不應該有GUI類(視圖)實現一個監聽器(控制),因爲這是要求類是太多的東西。\ –

+0

@HovercraftFullOfEels沒錯,但......如果你看看' GardenActivities'類,它是充滿了顯示的代碼,建立一個新的'JFrame'和做什麼。如果類在做相關程序的工作,而不是純粹的呈現的東西,我會說不會使它成爲'ActionListener' –

+0

李,他已經使用匿名內部類爲他的行動的聽衆將定製每個動作偵聽器JButton使用它。爲什麼反而建議他做GUI實現監聽,從而迫使他寫了一個可怕的總機actionPerformed方法。對不起,但這只是一個不好的建議。 –

3

我認爲你只需要添加:

new GardenActivities();

進入你的JButton的actionPerformed()方法。

祝你好運!

1

正如其他人所指出的那樣,這樣的:

@Override 
       public void actionPerformed(ActionEvent ev) 
        { 
         GardenActivities(); 
        } 

應該像這樣:

@Override 
       public void actionPerformed(ActionEvent ev) 
        { 
         new GardenActivities(); 
        } 

沒有理由創建一個內部類,並GardenActivities可以,而且應該是,其自己的班級。