2016-11-14 90 views
-2

你好,我想問我怎麼能從MainScreen叫我的主菜單屏幕?並請解釋一下Listener的更多細節。從屏幕調用不同的屏幕通過按鈕

下面

是我準備代碼:

public class MainScreen { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     frame.add(panel); 
     placeComponents(panel); 
     frame.setVisible(true); 
    } 
    private static void placeComponents(JPanel panel) { 
     JLabel WelcomeNote = new JLabel("Welcome"); 
     panel.add(WelcomeNote); 
     JButton Start = new JButton("Start"); 
     panel.add(Start); 
     //Insert action for Start button here 
    } 
} 


public class MainMenu { 
    public static void main(String[] args){ 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     frame.add(panel); 
     placeComponents(panel); 
     frame.setVisible(true); 
    } 
    private static void placeComponents(JPanel panel) { 
     JLabel menuLbl = new JLabel("Main Menu"); 
     panel.add(menuLbl); 
    } 
} 
+0

你想從另一個執行一個Java程序?你有2個void main() –

回答

0

有什麼不對?

在Java中的單個文件中不能有兩個主要的方法。


計劃

這裏是一個演示程序來改變窗口。

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 

class First extends JFrame 
{ 
    JLabel jlb = new JLabel("Label in First Window"); 
    JButton jb = new JButton("Next Window"); 
    First() 
    { 
     super("First Windows"); 
     //Set this frame 
     this.setSize(350,250); 
     this.setLayout(null); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //Setting size of components 
     jlb.setBounds(10,10,200,40); 
     jb.setBounds(10,120,150,40); 
     add(jlb); 
     add(jb); 

     jb.addActionListener((e)->{ 
      this.setVisible(false); 
      new Second(); 
     }); 

     setVisible(true); 
    } 
} 

class Second extends JFrame implements ActionListener 
{ 
    JLabel jlb = new JLabel("Label in Second Window"); 
    JButton jb = new JButton("Prev. Window"); 
    Second() 
    { 
     super("Second Window"); 
     this.setSize(350,250); 
     this.setLayout(null); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //Setting size of components 
     jlb.setBounds(10,10,200,40); 
     jb.setBounds(10,120,150,40); 
     add(jlb); 
     add(jb); 

     jb.addActionListener(this); 

     setVisible(true); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     this.setVisible(false); 
     new First(); 
    } 
} 

class StartHere 
{ 
    public static void main(String[] args) { 
     Runnable r =()->{ 
      new First(); 
     }; 
     r.run(); 
    } 
} 

理解上面的程序。

StartHere類有一個主要方法。它只是用來調用你喜歡的第一個窗口。我甚至可以使用new Second()來致電Second。

第一和第二是類似的代碼。
他們都有按鈕。在每個按鈕(或JButton)上,我添加了一個名爲addActionListner(this)的方法。此方法啓動一個ActionEvent,您可以在第二課中看到actionPerformed方法。此方法在功能接口,ActionListener中聲明。 'this'傳入的第二個類是告訴你的代碼中存在actionPerformed方法。該參數是一個ActionListener。因此,您必須爲您定義actionPerformed的類實施ActionListener


加成

首先類似乎不遵循上述準則。我通過了一個奇怪的語法。它是Java 8中包含的一項新功能。

請參閱此Oracle教程約Lambda Expressions