我已经设置了一个运行并接受来自我的远程客户端的连接的服务器,现在我正在使用我的GUI。
在此之前,我的目标是创建一个漂亮的客户端,它将具有登录屏幕(登录/ pw),然后在用户登录后使用我的选项/可能是聊天框的漂亮布局。< / p>
我已经在网上搜索了很多并使用这个网站来设置我的服务器并让工作正常,但我对GUI /理论有点问题,并希望有人在这里指导我一点。
目前,我已经设置了一个名为ClientGUI的类,它从我的主类中调用,这会生成一个420x240大小的屏幕。将我的登录/密码JTextField框放在这里后,它是否正确&#34;设置其他GUI的方式与我下面列出的方式相同?我不确定我是应该将它们放在一个类下面,还是我将如何从一个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()?
}
}
我从来没有做过这样的事情,所以我感觉我没有以理想的方式设置它。
另一种方法是为每个&#39;屏幕提供一个不同的java类来扩展JFrame。我想要,但如果我这样做,我会这样做吗?
在我的主要RemoteClient类中:
main {
ClientGUI();
//display whatever
LoginGUI();
//listen for login info
if (loginIsValid) {
afterlogginginGUI();
}
}
答案 0 :(得分:1)
我认为你正在思考一种线性方式,代码从A流向B再流向C ......实际上,Swing(以及一般的GUI)是事件驱动的...... / p> 发生了C,所以你做了B,触发了F,所以你做了E ...
首先创建JPanel
,然后添加JTextField
和JPasswordField
,这将作为您的基本登录视图。然后,您可以根据需要将其添加到JFrame
或JDialog
。您需要某种方式让用户“取消”或“验证”他们的凭据。
通常情况下,我这是一个单独的视图,因为我不知道我的可怜的“用户详细信息”窗格可能会在哪里结束,但您可以在单个视图中执行此操作(包括“用户详细信息”窗格中的按钮),将满足您的要求。
您可以使用CardLayout
从“登录”视图切换到“应用程序”视图。这样做的好处是只保留一个框架并防止窗户被溅到这个地方......
我个人会将视图的核心功能分离到不同的类,这意味着您可以在需要时简单地创建实例并将其添加到您想要的任何容器中。
我建议不要直接从JFrame
延伸。这将您锁定到一个容器中(以后很难重新使用组件或扩展程序)并且您无法向该类添加任何新功能......
首先看一下Creating a GUI With JFC/Swing。
您可能也会对How to Use CardLayout,How to Make Dialogs,How to Use Buttons, Check Boxes, and Radio Buttons和How to Write an Action Listeners
感兴趣您还需要查看Laying Out Components Within a Container
因为您可能在某个时候等待来自服务器的响应,所以您需要查看Concurrency in Swing并且Worker Threads and SwingWorker不会受到伤害