1

我在 JPanel 中添加组件时遇到了一些问题,特别是我添加了一个 JButton 和一个 JLabel,但它们似乎并不尊重我给它们的大小和位置。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class test extends JFrame{
    private JPanel panel,panel2;
    private JLabel insMatriz;
    private JButton envMatriz;

    public test(){
        super("Test");
        setLayout(new BorderLayout());
        getContentPane().setBackground(Color.red);

        panel = new JPanel();
        add(panel,BorderLayout.WEST);
        panel.setBackground(Color.blue);

        panel2 = new JPanel();
        add(panel2,BorderLayout.EAST);
        panel2.setBackground(Color.GRAY);

        panel.setPreferredSize(new Dimension(330,300));
        panel2.setPreferredSize(new Dimension(330,300));


        insMatriz = new JLabel();
        panel.add(insMatriz);
        insMatriz.setSize(new Dimension(50,10));
        insMatriz.setLocation(5,5);
        insMatriz.setText("Insert:");

        envMatriz = new JButton();
        panel2.add(envMatriz);
        envMatriz.setSize(new Dimension(100,50));
        envMatriz.setLocation(5,5);
        envMatriz.setText("Submit");

        setSize(700,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
}
4

2 回答 2

2

这是因为您正在混合绝对布局和LayoutManager的。在 Swing 中,您有两个选项,您必须为每个组件选择其中一个。试图同时做这两件事总是会遇到麻烦:

  1. 您使用绝对布局:这意味着您调用setLayout(null)该组件并且您负责子组件的大小和定位。您必须使用 setBounds/setSize-setPosition 来定位和调整子组件的大小。
  2. 您使用 LayoutManager(BorderLayout、FlowLayout、GridBagLayout 等),并将定位和调整大小留给 LayoutManager。为了表明您希望如何执行此操作,您选择适当的 LayoutManager,您可能会提供约束并且您有时(但这应该是例外)需要强制最小/最大/首选大小。

我强烈推荐使用LayoutManager,因为它会提供更简洁的组件、更好的跨平台体验、尊重 L&F 特性并且更易于维护。

于 2012-06-21T07:27:41.053 回答
0

我认为您应该在主面板中插入另一个面板。然后将标签插入内板。

于 2012-06-20T20:58:23.223 回答