2

私は非常に単純な Java プログラムを持っています (以下を参照)。GridLayout には 20 行と 4 列があります。ご存じのように、要素は (GridLayout) 定義によって水平方向に追加されることになっています。ただし、2 つの要素 (ラベル) が上下に垂直に配置されます。

それらに色を付けてみると、ラベルが行全体を占めているため、垂直効果があることに気付きました。しかし、次に setSize(5,5) を使用してそれぞれを小さくしましたが、それでも行全体を占めています。これが発生する理由と、小さいサイズなどを修正/設定する方法についてのアドバイスはありますか?

public class Sam extends JFrame {

    public JButton btn_arr;
    public Container c;
    public JLabel[] lbl = new JLabel[20];


    public Sam()
    {
        c = getContentPane();
        c.setLayout(new GridLayout(20,4));
        lbl[1] = new JLabel("Column1");
        c.add(lbl[1]);

        lbl[2] = new JLabel("Column2");
        c.add(lbl[2]);

        show();     
    }

    public static void main(String[] args) 
    {
        Sam x = new Sam();
        x.setVisible(true);
        x.setSize(7500,4500);
    }

}
4

2 に答える 2

3

2 つのコンポーネントのみをグリッドに追加しているので、グリッドがいっぱいになります。元の JLabels を適切な場所 (おそらく空の JLabels または JPanels) に配置できるように、プレースホルダーとしてグリッドにさらにコンポーネントを追加する必要があります。

余談ですが、Swing コンポーネントのサイズを設定することは避けてください。現在お使いの7500、4500は少し大きいサイズです。

余談ですが、ここでは代わりに JTable を使用することをお勧めします。

編集: 4 つの列と可変数の行を持つ GridLayout が必要な場合0は、GridLayout 行定数に使用します。

c.setLayout(new GridLayout(0, 4));

例えば、

import java.awt.*;
import javax.swing.*;

public class Sam extends JFrame {
   public static final int COLUMN_COUNT = 4;

   public JButton btn_arr;
   public Container c;
   public JLabel[] lbl = new JLabel[COLUMN_COUNT];

   public Sam() {
      c = getContentPane();
      c.setLayout(new GridLayout(0, COLUMN_COUNT));

      for (int i = 0; i < lbl.length; i++) {
         lbl[i] = new JLabel("Column " + (i + 1));
         c.add(lbl[i]);
      }

   }

   public static void main(String[] args) {
      Sam x = new Sam();
      x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      x.pack();
      x.setLocationRelativeTo(null);
      x.setVisible(true);
      // x.setSize(7500,4500);
   }

}

それでも、ここで JTable がうまく機能しないのではないかと思います。

于 2012-12-30T15:12:02.707 に答える
2

GridLayout で留意すべきことの 1 つは、セルを可能な限り均等にサイズ設定するパネル全体をカバーするように設計されており、セルに追加された要素がセル全体を埋めるように展開されることです。したがって、セルのサイズが変化すると、ラベルのサイズも変化します。効果的なグリッド セルは、含まれるすべての要素の X 方向と Y 方向の両方で拡張/収縮を強制します。

GridLayout を使用する必要がある場合にこれを回避する方法の 1 つは、GridLayout を使用するコンテナーにラベルを直接追加するのではなく、配置を設定できる FlowLayout (デフォルト) を使用する JPanel 内に各ラベルを配置することです。 Left、Middle、Right のいずれかで、その JPanel を Grid コンテナーに追加します。JPanel はサイズ変更されますが、Label のサイズは変更されません。

または、GridBagLayout マネージャーを使用します。より複雑ですが、一度理解すると、作業が楽になります。しかし、Hovercraft が述べたように、行おうとしているのが列ヘッダーを持つグリッドを作成することである場合は、JTable の方が適している可能性があります。

于 2012-12-30T17:05:28.447 に答える