Dum*_*s45 1 java layout swing border-layout absolutelayout
同事。
我正在尝试用Java构建简单的GUI,其中JFrame具有Border Layout。我想将带有JTable的JScrollPane放到CENTER,将没有布局的JPanel放到NORTH。
问题是JPanel不可见。这个问题有一个简单的例子:
JFrame frame = new JFrame("Test frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("Test button");
button.setBounds(10, 10, 40, 20);
JPanel panelN = new JPanel(null); // layout = null, panelN without layout
panelN.add(button);
frame.add(panelN, BorderLayout.NORTH);
JTable table = new JTable(new DefaultTableModel(4, 4));
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(400, 400);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
您必须使用LayoutManager。不建议不要使用layoutManager,但是如果要这样做,也必须将其设置panel.setBounds(..)为面板。
默认情况下,JPanel有FlowLayout所以如果你把
JPanel panelN = new JPanel(); // FlowLayout used
panelN.add(button);
frame.add(panelN, BorderLayout.NORTH);
Run Code Online (Sandbox Code Playgroud)
因此您的框架将如下所示。

布局管理器确定容器中组件的大小和位置。尽管组件可以提供大小和对齐提示,但是容器的布局管理器对容器中组件的大小和位置拥有最终决定权。
强烈建议使用该原因,例如,如果您必须调整组件的大小或以不同的分辨率显示,则可以将此工作委托给布局管理器