2014-10-08 149 views
0

我已經設置了一個運行並接受來自我的遠程客戶端的連接的服務器,現在我正在使用我的GUI。Java遠程客戶端GUI

在開始之前,我的目標是創建一個漂亮的客戶端,它將擁有一個登錄屏幕(登錄/密碼),然後在用戶登錄後使用我的選項/或許還有一個聊天框。

我在網上搜索了很多,並使用這個網站來設置我的服務器並讓事情起作用,但是我對GUI /理論有點問題,希望這裏有人能指導我一點。

目前,我已經建立了一個名爲ClientGUI的類,該類從我的主類中調用,並生成一個420x240大小的屏幕。在將我的登錄名/密碼JTextField框放置在這裏之後,按照我下面概述的方式設置其他GUI是否「正確」?我不確定我是否應該將它們放在一個班級下,或者我會如何從一個GUI進入下一個班級。我想我應該根據需要重新繪製和調整屏幕大小,但我不知道如何設置它。一個簡要的提綱將會有幫助(你不需要給我確切的代碼)。

public class ClientGUI extends JFrame { 

    public ClientGUI() { 
     setSize(420,240); 
     setVisible(true); 
     setTitle("Title"); 
     setResizable(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(null); 
    } 

    public loginGUI() { 
     //code for my login/pw boxes, images, listener for entering information 
    } 

    public afterlogginginGUI() { 
    } 

    paint() { 
    //not too sure about how this should be setup either. Should I do all my textfield 
    //and image work in paint()? 
    } 

    } 

我從來沒有做過這樣的事情,所以我覺得我沒有以理想的方式設置它。

另一種方法是爲我想要的每個「屏幕」都擴展JFrame的不同java類,但是如果我這樣做,我會這樣做嗎?

在我的主要RemoteClient類:

main { 
    ClientGUI(); 
    //display whatever 
    LoginGUI(); 
    //listen for login info 
    if (loginIsValid) { 
     afterlogginginGUI(); 
    } 
} 

回答

1

我想你想的到多線性方式,其中的代碼在隨後流向然後B到C的...這裏其實,擺動(和GUI的一般)是事件驅動...

ç發生,所以你做B超,所以你做電子商務這將觸發F的

開始通過創建一個JPanel,到這個添加JTextFieldJPasswordField,這將作爲你的基本日誌在視圖中。然後,您可以根據您的需要將其添加到JFrameJDialog。您需要某種方式讓用戶「取消」或「驗證」他們的憑證。因爲我不知道我可憐的「用戶詳細信息」窗格最終會在哪裏,但是您可以通過單個視圖(包括「用戶詳細信息」窗格中的按鈕)執行此操作,這將降低到您的要求。

您可以使用CardLayout從「登錄」視圖切換到「應用程序」視圖。這有利於保持僅一幀,並防止窗戶濺到所有的地方...

我個人將視圖的核心功能分開到不同的類,這意味着你可以簡單地創建一個實例,當你需要它,並將其添加到任何你想要的容器。我會建議不要直接從JFrame延伸。這會將你鎖定到一個容器中(以後很難重新使用組件或擴展程序),而且你也不會爲該類添加任何新功能......

首先查看Creating a GUI With JFC/Swing

你可能也有興趣How to Use CardLayoutHow to Make DialogsHow to Use Buttons, Check Boxes, and Radio ButtonsHow to Write an Action Listeners

您還需要看看Laying Out Components Within a Container

因爲你很容易等待服務器的響應在某些時候,你需要看看Concurrency in SwingWorker Threads and SwingWorker不會傷害

+0

我已經對如何驗證登錄信息有一個大概的瞭解(我已經建立了我的服務器到客戶端的形式克/讀),所以我知道我會怎樣觸發某些事件。當你說要將核心功能分離到不同的類時,你的意思是把所有的東西(例如1個用於登錄視圖的類,1個用於後來的任何類的類)分離出來,或者只把函數分開(比如驗證而不是佈局)?我假定你的意思是分開的一切。 我會閱讀這些鏈接。 – Rahul 2014-10-08 04:55:45

+0

*「我認爲你的意思是分開一切」* - 是的,一般來說,這是最好的方法。這是[Model-view-controller](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)範例的前提。基本上,你的UI(視圖)會從用戶那裏收集數據,當按下「登錄」按鈕時,按鈕的「ActionListener」會要求控制器執行驗證。這意味着您可以實際改變驗證的工作方式,而無需更改視圖,這是一個基本示例。如果您想知道,該模型可能包含憑據 – MadProgrammer 2014-10-08 04:59:48

+0

我正在爲我的登錄屏幕設計我的GUI,現在使用JFrame。爲什麼你說使用JPanel而不是JFrame有特定的原因嗎?另外,在創建我的第二個屏幕時,是否可以簡單地創建另一個JFrame並在其自己的類中單獨設計它,然後退出我的登錄窗口並創建新類的實例?我知道你建議使用CardLayout,我可能會這樣做,但我在網上看了一個例子,想知道這是轉換到下一個視圖的最佳方式。 – Rahul 2014-10-08 06:06:32