java - 手工编码的 GUI - Java

标签 java swing user-interface layout awt

<分区>

我正在尝试使用 Swing 和 AWT 手动编写 Java GUI。我正在使用各种布局来尝试实现或类似于下面发布的 GUI(这是一个用铅笔制作的模拟布局):

Mock Layout - (Made with Pencil)

到目前为止我得到的是这个,但似乎无法让它变得更“礼貌”、吸引人和尽可能对用户友好。

Java GUI try

这是我到目前为止完成的代码:

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


public class GUI extends JFrame {

    public void buildGui() {

        JFrame frame = new JFrame("Hotel TV Scheduler");

                JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout(0,0));

                JPanel chPanel = new JPanel();
                chPanel.setLayout(new GridLayout(3,2));

                JPanel listPanel = new JPanel();
                listPanel.setLayout(new GridLayout(3,2));

                JPanel infoPanel = new JPanel();
        infoPanel.setLayout(new GridLayout(0,2));


                JPanel addPanel = new JPanel();
        addPanel.setLayout(new GridLayout(0,3));


                mainPanel.add(chPanel, BorderLayout.LINE_START);
                mainPanel.add(listPanel, BorderLayout.CENTER);
                mainPanel.add(infoPanel, BorderLayout.LINE_END);


                JTable chOneTable = new JTable();
                JTable chTwoTable = new JTable();
                JTable listTable = new JTable();

                JLabel ch1Label = new JLabel("Channel 1");
                JLabel ch2Label = new JLabel("Channel 2");
                JLabel listLabel = new JLabel("List");

                JButton rmvChOneButton = new JButton("Remove Channel");
                JButton rmvChTwoButton = new JButton("Remove Channel");

                chPanel.add(ch1Label);
                chPanel.add(ch2Label);
                chPanel.add(chOneTable);
                 chPanel.add(chTwoTable);
                chPanel.add(rmvChOneButton);                                         
                chPanel.add(rmvChTwoButton);

                listPanel.add(listLabel);
                listPanel.add(listTable);                



                JLabel titleLabel = new JLabel("Title");
                JLabel genreLabel = new JLabel("Genre");
                JLabel durationLabel = new JLabel("Duration");
                JLabel actorLabel = new JLabel("Actor");
                JLabel directorLabel = new JLabel("Director");
                JLabel rentableLabel = new JLabel("Rentable");
                JLabel synLabel = new JLabel("Synopsis");

                JTextField txtTitle = new JTextField();          
                JTextField txtGenre = new JTextField();
                JTextField txtDuration = new JTextField();
                JTextField txtActor = new JTextField();
                JTextField txtDirector = new JTextField();
                JTextField txtSynopsis = new JTextField();

                JCheckBox rentCB = new JCheckBox();

                JButton btnAddProg = new JButton("Add Program");

                JList channelList = new JList();
                JList timeList = new JList();

                infoPanel.add(titleLabel);
                infoPanel.add(txtTitle);
                infoPanel.add(genreLabel);
                infoPanel.add(txtGenre);
                infoPanel.add(durationLabel);
                infoPanel.add(txtDuration);
                infoPanel.add(actorLabel);
                infoPanel.add(txtActor);
                infoPanel.add(directorLabel);
                infoPanel.add(txtDirector);
                infoPanel.add(rentableLabel);
                infoPanel.add(rentCB);
                infoPanel.add(synLabel);
                infoPanel.add(txtSynopsis);
                infoPanel.add(btnAddProg);
                infoPanel.add(channelList);
                infoPanel.add(timeList);


                frame.add(mainPanel);
                frame.setVisible(true);


    }


}

它不必与上面显示的模拟布局完全相同,但尽可能相似或至少对用户更友好。

除了 GridBagLayout 和 SwingLayout,我想使用任何东西。

关于如何改进代码并使其看起来更相似有什么想法吗?

感谢任何帮助。

布莱恩

最佳答案

看看 MigLayout .它的许可非常包容:

MigLayout is free to use for commercial and non-commercial projects and the source code is provided. It is licensed under the very free BSD or GPL license, whichever you prefer

JNLP demo application应该展示很好的例子和相应的来源。

另外,尽量避免嵌套逻辑上不相关的组件。随着嵌套程度的增加,获得对齐、边框和填充变得非常痛苦。

关于java - 手工编码的 GUI - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10093558/

相关文章:

java - 如何在vaadin中动态添加标签?

java - 如何通过传递该项目的路径来计算java项目中的类和方法的数量?

java - Java中无法跳出For循环

java - BufferedImage 将图像与其自身进行比较会抛出 ArrayOutOfBoundsException

java - 如何在 Swing 中验证用户的输入?

java - 如何阻止 JTable 中的列按宽度调整大小?

java - 主线程在无限循环中停止

jQuery UI 自动完成 - 工具提示显示列表中的所有条目,即使不匹配

java - 定时运行任务java,apache

java - 无法加载已保存的 JButton