2012-12-05 85 views
0

我一直在用Java開發命令行程序一段時間,並正在研究如何實現GUI解決方案。我對此很陌生,所以任何幫助都會非常有幫助。提前致謝。 我最近問了關於按鈕的另一個問題,但我現在有另一個問題。在java中的菜單之間跳轉

我已經從一本書學習如何使用動作監聽器來執行基於按鈕操作。但是,在這本書中,這些按鈕簡單地稱爲產生文本輸出的方法。

我需要一種方法來讓用戶按下一個按鈕,把他/她與不同的按鈕/選項的新窗口,如果用戶希望他們可以按下另一個按鈕返回到前一個窗口。如果有人能夠給我一個框架解決方案,並解釋我的例子如下:

如果用戶按下「圖書館菜單」它們被帶到一個窗口,用戶會看到兩個按鈕,「庫菜單」和「帳戶菜單」 可以選擇添加書籍,刪除書籍等,最後按鈕返回到主屏幕。 如果用戶按下「帳戶菜單」,它們會出現一個新窗口/帶有按鈕的菜單,用於添加,刪除,重命名等操作,並再次返回主屏幕/主菜單。

的命令行,這是簡單的,因爲選擇庫將調用庫類的方法。該方法將有一個開關案例,根據用戶輸入調用不同的方法,當用戶輸入'e'時,例如switch case有一個選項可以退出該方法,即return語句將用戶帶回到方法最初稱之爲(在主屏幕中)。

我非常感謝任何關於此的幫助/建議/信息!

回答

2

它一般不建議呈現多個窗口或框架給用戶,它變得很快混亂和煩人。

一般來說,如果你想切換你應該使用CardLayout,這樣可以讓你改變什麼是對用戶主顯示器中的視圖。

你也可以使用一個JTabbedPane這將允許用戶在不同的視圖之間移動,因爲他們喜歡

0

正如你所知道的ActionListener的,你可能知道如何創建一個JFrame,它似乎是你的邏輯是確定。糾正我,如果我錯了,你只需要一個ActionListener的骨架?
爲了您的按鈕的MouseListener,這或許應該只是罰款:

JButton btnExit = new JButton("Exit"); // Creating the button 

btnExit.addMouseListener(new MouseAdapter() { // Adding a mouseListener to your component 
    // Mouse is pressed in this component 
    @Override 
    public void mousePressed(MouseEvent e){ 
     yourFrame.dispose() // Closes your JFrame 
    } 
}); 

1

你可以做一個JPanel,爲每一個「窗口」,並切換在一個JFrame。爲了有相同的設計,可以在將來進行更改,需要某種建模:添加按鈕等的生成步驟。

使用Action-s(AbstractAction)可幫助解耦,在Model-View中分離所有-Controller。

真正的應用程序可能會是一個主要的JFrame,也許調用一些JFrames,肯定是由@MadProgrammer提出的想法。您的JPanel可以插入,無論是在JTabbedPane,JInternalFrame或其他。

使MVC類提供JPanel,管理Actions。

0

您可能需要先創建所有WINDOS(新窗口),並只顯示他們在按一下按鈕,這樣你不會有相同的窗口的多個實例。

public MainWindow extends JFrame 
{ 
    private LibraryWindow libWin; 
    private AccountsWindow accWin; 

    public MainWindow() 
    { 
     libWin = new LibraryWindow(); 
     libWin.setParent(this); 
     accWin = new AccountsWindow(); 
     accWin.setParent(this); 

     ... 

     this.show(); 
    } 

    btnLib.addMouseListener(new MouseAdapter() { // Adding a mouseListener to your component 
    // Mouse is pressed in this component 
    @Override 
    public void mousePressed(MouseEvent e){ 
     libWin.show(); //shows your window on top of the main window 

     //if you want to switch windows you can hide the parent 
     this.hide(); 
    } 
}); 


public LibraryWindow extends JFrame 
{ 


    public LibraryWindow() 
    { 
     //create/design the window 

     ... 

     //don't show the window, the main window will do that 
    } 

    btnExit.addMouseListener(new MouseAdapter() { // Adding a mouseListener to your component 
    // Mouse is pressed in this component 
    @Override 
    public void mousePressed(MouseEvent e){ 

     //if you want to switch windows you can show the parent 
     this.parent.show(); 

     this.hide(); //only hide the window in order to reuse it 
     //restore the window to its initial state 
    } 
});