1

私は、正方形にしたいウィジェットを含む GridLayout を備えた Java アプレットを持っており、互いに密に詰め込まれたままです (したがって、それらのサイズは制限されません)。
ただし、画面に対して大きすぎるか、ウィジェットの「直角」を維持できなくなる前に、GridLayout ができるだけ多くのスペースを占有することを望みます。
GridLayout の行数と列数は必ずしも同じではないことに注意してください (グリッド全体が正方形でなくてもかまいません)。

このアプレットは、この html ファイルを介して表示されます。

<html>
<body>
<applet code=client.Grid.class 
        archive="program.jar"
        width=100% height=95%>
</applet>
</body>
</html>

現在、これにより、アプレットは配置されているウィンドウに展開されます。ウィンドウのサイズを変更することでグリッドのサイズを変更できますが、これにより各ウィジェットのジオメトリが変更されます (「直角」が失われます)。

そう; これらの幾何学的制限をどこにどのように配置するのですか?
行/列数を認識せず、アプレットを作成するのに最適なサイズがわからないため、html ファイルだけに含めることはできません。
ただし、GridLayout またはそれを含む Panel でサイズを設定する方法がわかりません。これは、表示ブラウザーのページ サイズを (可能な限り大きくするために) 知っている必要があり、html が指定されたジオメトリは、指定されたアプレットをオーバーライドします。

編集:
アンドリューの提案を実装しようとしています。

screen = new JPanel(new GridLayout(rows, columns)) {

    public Dimension getPreferredSize() {

        Dimension expected = super.getPreferredSize();  
        // calculate preferred size using expected, rows, columns
        return new Dimension(100, 100) // testing
    }
    public Dimension getSize() {
        return getPreferredSize();
    }
};

これが「最小サイズ」を無視していることは理解していますが、現時点では問題ありません。
画面は、他のウィジェットを含むボーダー レイアウトの中央に配置されます

getContentPane().add(screen, BorderLayout.CENTER);
getContentPane().add(otherWidgets, BorderLayout.PAGE_END);

これがスペースの中心にならないことはわかっていscreenますが、現時点では完全に必要というわけではないので、物事をできるだけシンプルに保ちたい.

これはまったく機能していません。最小サイズのものを除いて、私が以前に持っていたものと目に見える違いはありません (Eclipse で表示した場合、まだ HTML の段階に到達していません)。画面コンポーネントは、余暇にアプレットによってまだサイズ変更されており、セルが「非正方形」になっています。私は何を間違っていますか?

4

1 に答える 1