-2

我有 3 个面板,panel1 有 3 个组件(添加、删除、编辑)JButtons,panel2(scrollPane)有 jtable 和 panel3 再次作为(5 JTextFields,5JLabels)。当我将所有面板添加到框架中时,panel3 组件仅显示部分显示(4JTextFields)仅在框架内可见。对于面板,我将 BorderLayout 用于 frame.add(panel2,BorderLayout.SOUTH) , frame.add(panel3,BorderLayout.CENTER); panel1, panel2 显示所有组件,但 panel3 仅显示部分。您能否准确地建议我应该使用哪种布局,用于面板,以及如何为我的框架设置大小以容纳所有面板(组件)?清楚地?

`

          frame.add(topPanel, BorderLayout.NORTH);
        frame.add(updatePanel, BorderLayout.SOUTH);
        frame.add(middlePanel, BorderLayout.CENTER);

        frame.setVisible(true); 
        frame.setSize(850, 500);

`

4

1 回答 1

2

尝试使用Window#pack

使此 Window 调整大小以适合其子组件的首选大小和布局。如果任一尺寸小于先前调用 setMinimumSize 方法指定的最小尺寸,则生成的窗口宽度和高度会自动放大。

如果窗口和/或其所有者还不能显示,则在计算首选大小之前,它们都可以显示。在计算窗口大小后验证窗口。

更新了示例

如果没有SSCCE(工作示例),就不可能完全诊断您的问题。让我演示一下...

因此,根据您的描述,我可以毫无问题地创建它...

在此处输入图像描述

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class TestPack {

    public static void main(String[] args) {
        new TestPack();
    }

    public TestPack() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TopPanel(), BorderLayout.NORTH);
                frame.add(new MiddlePanel(), BorderLayout.CENTER);
                frame.add(new UpdatePanel(), BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TopPanel extends JPanel {

        public TopPanel() {
            setBackground(Color.red);
            add(new JLabel("I'm on top"));
        }

    }

    public class MiddlePanel extends JPanel {

        public MiddlePanel() {
            setLayout(new BorderLayout());
            add(new JScrollPane(new JTable(new DefaultTableModel(new Object[]{"A", "B", "C"}, 5))));
        }

    }

    public class UpdatePanel extends JPanel {

        public UpdatePanel() {
            for (int index = 0; index < 5; index++) {
                add(new JLabel(Integer.toString(index)));
                add(new JTextField(5));
            }
            add(new JButton("Button"));
        }            
    }        
}

但显然,你正在做一些不同的事情。花时间用一个工作示例更新您的问题,否则我们无能为力

于 2013-08-22T06:53:44.010 回答