1

JPanels 内にコンポーネントを追加する際に問題が発生しています。特に、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 には 2 つのオプションがあり、コンポーネントごとにいずれかを選択する必要があります。両方を同時に実行しようとすると、常に問題が発生します。

  1. 絶対レイアウトを使用します。これは、setLayout(null)そのコンポーネントを呼び出し、子コンポーネントのサイズと配置を担当することを意味します。子コンポーネントの位置とサイズを設定するには、setBounds/setSize-setPosition を使用する必要があります。
  2. LayoutManager (BorderLayout、FlowLayout、GridBagLayout など) を使用し、配置とサイズ変更は LayoutManager に任せます。これをどのように実行するかを示すために、適切な LayoutManager を選択します。おそらく制約を提供し、最小/最大/優先サイズを強制する必要がある場合があります (ただし、これは例外です)。

よりクリーンなコンポーネントを提供し、より優れたクロスプラットフォーム エクスペリエンスを提供し、L&F 機能を尊重し、より保守しやすいため、LayoutManagerを使用することを強くお勧めします。

于 2012-06-21T07:27:41.053 に答える
0

メインパネルに別のパネルを挿入する必要があると思います。次に、ラベルを内側のパネルに挿入します。

于 2012-06-20T20:58:23.223 に答える