1

私は、22*12 セルを保持する内部コンテナーを含む JFrame を中心とした外部コンテナーを持つプログラム用に作成している Gui を持っています。このプログラムを実行すると、背景が白くちらつき、そのままになります。私が間違っているところを指摘していただければ、それは素晴らしいことです!

public class Gui extends JFrame
{   
private JPanel outer, inner;
private JLabel[][] labels = new JLabel[22][12];

public Gui()
{
    setBackground(Color.black);
    setSize(1000,1000);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    outer = new JPanel();
    outer.setLayout(new BorderLayout());
    outer.setSize(620,920);
    outer.setBackground(Color.white);

    inner = new JPanel();
    inner.setLayout(new GridLayout(22,12,10,10));
    inner.setSize(600,900);
    inner.setBackground(Color.white);

    for (int i = 0; i < 22; i++)
    {
        for (int j = 0; j < 12; j++)
        {
            labels[i][j] = new JLabel();
            JLabel label = labels[i][j];
            label.setSize(50,50);
            label.setBackground(Color.gray);
            inner.add(label);
        }
    }

    outer.add(inner, BorderLayout.CENTER);
    add(outer, BorderLayout.CENTER);
    }
}

GUI は、それをインスタンス化するメイン クラスで可視に設定されます。

GUI が作成され、適切なサイズになっています。黒い背景で始まり、直後にランダムに白に変わり、そのままになります。

編集:これがまだ重要な場合:

public static void main(String[] args)
{
    SwingUtilities.invokeLater(new Runnable()
    {

        public void run()
        {
            Gui gui = new Gui();
            gui.setVisible(true);
        }
    });
}
4

1 に答える 1

5

最終的な静的命名規則に従う新しい静的変数名を使用します。つまり、変数は大文字にする必要があります。

//setBackground(Color.black);
setBackground(Color.BLACK);

コンポーネントに setSize() を使用しないでください。代わりに、フレームにコンポーネントを追加してから pack() メソッドを使用して、コンポーネントが適切なサイズで表示されるようにします。

//setSize(1000,1000);
add(component1);
add(anotherComponent);
pack();

レイアウト マネージャーは、サイズではなく推奨サイズをレイアウトのヒントとして使用します。

//label.setSize(50,50);
label.setPreferredSize(new Dimension(50, 50));

これが主な問題です。JLabel はデフォルトで透明なので、設定した背景色は無視されます。

label.setBackground(Color.gray);
label.setOpaque(true);

ところで、私の画面の高さは 738 しかないので、22*50 の高さが必要なので、フレーム全体を見ることはできません。これを認識し、パネルを JScrollPane に追加して、私のような人が実際にアプリケーションを使用できるようにする必要があります。これが、優先サイズをハードコーディングしない理由です。

于 2013-05-14T15:50:40.543 に答える