JPanelが飛び出し、FlowLayoutが意図したとおりに機能しない
-
03-07-2019 - |
質問
このコードが機能していた先日。いくつかのことを変更して再実行しましたが、意図したとおりに動作しなくなりました。明らかに、私が変更したものが動作を変更しましたが、私は戻ってそれらの変更をすべて元に戻しましたが、それでも動作しません。その情報のビットを無視して(開始するには)、なぜこのコードはJPanel内にJLabelの15x15グリッドを配置しないのですか?
gameBoard.setLayout(new FlowLayout());
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 15; j++)
{
JLabel tile = new JLabel("");
tile.setHorizontalAlignment(SwingConstants.CENTER);
tile.setPreferredSize(new Dimension(27, 27));
tile.setBorder(new EtchedBorder());
tile.setEnabled(false);
gameBoard.add(tile);
}
}
gameBoardは、NetBeansのGUIビルダーで定義されたJPanelです。推奨サイズ、最大サイズ(推奨と同じ)があります。水平/垂直のサイズ変更可能なオプションは無効になっていますが、このコードを実行すると、すべてのボタンが壊れることなく水平方向に連続して伸びます。
正しく理解すれば、FlowLayoutは要素を含む要素の最後に到達したときに要素をラップすることになっています。これは今日前に起こっていましたが、なぜこの振る舞いが止まったのか分かりませんか?
解決 4
わかりました。どうやらコード内でpreferredSizeを設定する必要があったようです。 Netbeansのプロパティウィンドウで設定するだけでは不十分です。奇妙な。
他のヒント
GridLayout gridLayout = new GridLayout(15, 15);
新しいルックアンドフィールの使用、異なるフォントの使用、またはJava VMのアップグレードにより、フローレイアウトが変更された可能性があります。この用途のフローレイアウトを定義することはお勧めしません。これは、仮想マシンやルックアンドフィールによって異なる可能性のある基礎サイズに依存しているためです。
釣りの方法を男性に教えるため:
リビジョン管理システムは素晴らしいです。システムでさえ、頻繁にソースのバックアップを作成しています。
便利なデバッグ手法は、機能するまで物を取り除くことです。境界線を設定すると、コードが破損します。逆に、問題を実証する簡単なプログラムを作成できますか。
TableLayout を使用して、大きな成功と制御を発見しました。誰にでもお勧めします。特定のピクセル数を使用して列と行を定義するか、各列および/または行ごとに TableLayout.PREFERRED
を使用できます。とても素敵で柔軟なレイアウト。どこでも使用します。