2014-10-08 152 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