Java GUI 问题(布局管理器)

标签 java swing layout jframe layout-manager

我刚刚开始使用 Java 布局管理器,到目前为止,让 GUI 按预期运行非常困难:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;

    public class ex1 extends JFrame {

    private javax.swing.JButton AddBtn,perviousBtn,NextBtn;
    private javax.swing.JLabel LatLabel, LongLabel, EvlLabel;
    private javax.swing.JTextField LatText,LongText,EvlText;

    String columns[] = { "ID", "Name", "Age", "Gender" };
    Object data[][] = { { "0", "Tom", new Integer(20), "Male" },
            { "1", "Tina", new Integer(18), "Female" },
            { "2", "Raj", new Integer(19), "Male" },
            { "3", "Tina", new Integer(18), "Female" },
            { "4", "Raj", new Integer(19), "Male" },
            { "5", "Tina", new Integer(18), "Female" },
            { "6", "Raj", new Integer(19), "Male" },
            { "7", "Tina", new Integer(18), "Female" },
            { "8", "Raj", new Integer(19), "Male" },
            { "9", "Tina", new Integer(18), "Female" },
            { "10", "Raj", new Integer(19), "Male" }
    };

    public void addComponentsToPane(final Container pane) {

        JPanel compsToExperiment = new JPanel();
        GridLayout experimentLayout = new GridLayout(3, 3);
        compsToExperiment.setLayout(experimentLayout);
        JPanel Table = new JPanel();
        Table.setLayout(new GridLayout(8, 1));
        JPanel nav = new JPanel();
        nav.setLayout(new GridLayout(8, 3));

        LatLabel = new javax.swing.JLabel("Latitude: ");
        LongLabel = new javax.swing.JLabel("Longitude: ");
        EvlLabel = new javax.swing.JLabel("Elevation: ");
        LatText = new javax.swing.JTextField();
        LongText = new javax.swing.JTextField();
        EvlText = new javax.swing.JTextField();
        AddBtn = new javax.swing.JButton("Add");
        perviousBtn = new javax.swing.JButton("Next");
        NextBtn = new javax.swing.JButton("pervious");

        // perviousBtn.setPreferredSize(new Dimension(60, 60));

        compsToExperiment.add(LatLabel);
        compsToExperiment.add(LongLabel);
        compsToExperiment.add(EvlLabel);

        compsToExperiment.add(LatText);
        compsToExperiment.add(LongText);
        compsToExperiment.add(EvlText);
        compsToExperiment.add(AddBtn);

        // jButton1.addActionListener((ActionListener) this);
        // this.add(jButton1);

        JTable table = new JTable(data, columns);
        Table.add(table.getTableHeader());
        Table.add(table);

        nav.add(NextBtn);
        nav.add(perviousBtn);

        pane.add(compsToExperiment, BorderLayout.NORTH);
        pane.add(nav, BorderLayout.EAST);
        pane.add(Table, BorderLayout.CENTER);
    }

    /**
     * Create the GUI and show it. For thread safety, this method is invoked
     * from the event dispatch thread.
     */

    private static void createAndShowGUI() {

        ex1 frame = new ex1();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.addComponentsToPane(frame.getContentPane());
        frame.setSize(500, 500);
        //frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {

        try {    
            UIManager.setLookAndFeel(
                  "javax.swing.plaf.metal.MetalLookAndFeel");
        } catch (UnsupportedLookAndFeelException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        } catch (InstantiationException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
        /* Turn off metal's use of bold fonts */
        UIManager.put("swing.boldMetal", Boolean.FALSE);

        // Schedule a job for the event dispatch thread:
        // creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });    
    }    
}

此外,我在获取表格显示所有条目时遇到问题,它只会显示前 3 个条目。您能帮我整理 GUI 并解决表格问题吗?

最佳答案

看看这些行:

    JPanel Table = new JPanel();
    Table.setLayout(new GridLayout(8, 1));

您应该仔细阅读有关 GridLayout 的文档,以便在代码中使用它,尤其是当您像在代码中一样使用多个布局时。我建议您在尝试编码之前在草稿纸上设计组件及其布局。在这里,我将 Table 的布局参数更改为:

    Table.setLayout(new GridLayout(0, 1));

它显示了所有的数据条目。以下是 API 在 GridLayout 上的说明:

public GridLayout(int rows, int cols)

创建具有指定行数和列数的网格布局。布局中的所有组件都具有相同的大小。 行和列中的一个(但不能同时)可以为零,这意味着可以将任意数量的对象放置在行中或列中。

关于Java GUI 问题(布局管理器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12882662/

相关文章:

html - 无法使图标顶部与 <li> 容器对齐

java - 异步等同于 Java 中的 BlockingQueue?

java - 使用Android发送网络图片

java - 更改数据后刷新 JTable

Java HTMLDocument(insertAfterEnd、insertAfterStart、insertBeforeEnd、insertBeforeStart)不工作?

android - 为什么尝试在 android 中设置 tabspec 的内容时出现错误?

c# - 具有静态和动态内容的 WinForms UserControl 的最佳布局?

java - 使用递归的回文程序

java - 为什么不同的案例条件体不在不同的范围内?

java - 使用 JOptionPane 进行提醒