需要帮助定位实验室的Java GUI组件

时间:2010-09-16 23:47:17

标签: java user-interface swing

我目前在大学注册了一个客户/服务器编程课程(即Java 2)。对于我们的第一个实验室任务,我们被要求创建一个简单的GUI来模拟基本的即时消息聊天客户端。此客户端将没有任何实际功能,只是一个简单的窗口。但是,此窗口必须类似于我的教授为Visual Basic类开发的窗口。现在,我知道,凭借我的基本知识,我将永远无法让我的代码看起来像完全这样的例子,但我想得到尽可能接近尽可能。

我真正的问题是:我应该使用什么LayoutManager(或其组合)尽可能接近这个?我只是在我的实验室项目中加入了前几个组件,但我很好奇我是否做得对...或者如果我使用最聪明的方法。感谢您的帮助!

编辑:OH,在我忘记之前,这是我现在已经拥有的示例代码。在闲暇时分开吧!对于我的代码和我尝试过的方法,欢迎任何和所有的批评!

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

public class Chat {
    public static void main(String[] args) {
        /*
         * The main() method is what creates the Frame for use by the user. It set's a default size to 300x600,
         * which is a pretty standard size for a chat client. It also adds a title to the Frame, which adds a
         * cool element there!
         */
        ChatClient GUI = new ChatClient();
        GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GUI.setSize(300, 600);
        GUI.setTitle("Lab 1: Chat");
        GUI.setVisible(true);
        GUI.start();
    }
}

class ChatClient extends JFrame {
    public void start() {
        setLayout(new BorderLayout());

        /*
         * Divide the main Frame into three separate Panels. The North Panel holds the username, server, and port
         * information, along with the associated Buttons.
         */

        JPanel northPanelGroup = new JPanel(new GridLayout(3, 3, 1, 1));
        JPanel centerPanelGroup = new JPanel(new GridLayout(1, 1, 1, 1));
        JPanel southPanelGroup = new JPanel(new GridLayout(1, 3, 1, 1));

        /*
         * Obviously, add the Panel Groups into the main Frame
         */
        add(BorderLayout.NORTH, northPanelGroup);
        add(BorderLayout.CENTER, centerPanelGroup);
        add(BorderLayout.SOUTH, southPanelGroup);

        /*
         * Begin adding the username, server, and port information into the North Panel
         */
        JPanel usernamePanel = new JPanel();
        usernamePanel.add(new JLabel("Username"));
        usernamePanel.add(new JTextField(10));
        northPanelGroup.add(usernamePanel);

        JPanel serverPanel = new JPanel();
        serverPanel.add(new JLabel("Server"));
        serverPanel.add(new JTextField(10));
        northPanelGroup.add(serverPanel);

        JPanel portPanel = new JPanel();
        portPanel.add(new JLabel("Port"));
        portPanel.add(new JTextField(5));
        northPanelGroup.add(portPanel);
    }
}

3 个答案:

答案 0 :(得分:1)

如果你在创建GUI时遇到问题,你应该在Netbeans IDE使用Mattise :)但老实说,如果你想以编程方式进行,你应该看看MigLayout(http://www.miglayout.com/)哪个是最简单,最灵活的布局管理器。

http://blogs.sun.com/roumen/resource/matisse6.PNG

答案 1 :(得分:1)

我是SpringLayout的粉丝。它需要一些思考,你最终会编写相当多的代码,但它提供了无与伦比的控制水平。

使用SpringLayout,您将每个组件的位置定义为与另一个组件的x-y偏移(例如,组件B的左侧距组件A的右侧5个像素)。通过精心规划,您可以轻松移动内容并使UI像素更加完美。

答案 2 :(得分:0)

您是否需要调整组件的大小?如果没有,只需使用null布局并以编程方式指定每个组件的坐标和大小,或者在WYSIWYG编辑器中通过IDE和NetBeans或带有WindowsBuilder的Eclipse指定。

(确保要求允许空布局,如果没有,那么你可能想要确切地找出每个控件在主要组件调整大小时调整大小,然后MiGLayout可能是你最好的选择,到目前为止。自从米格出现以来,我认为我从未需要任何旧的布局!)