1

JPanleが小さくなりすぎてサブコンポーネントが切断されないようにしようとしていますが、これを強制する方法はありますか?これを読んだ後、私は(jythonで)試しました:

frame= JFrame('example', size=(200,200))

pan = JPanel()
pan.add(JLabel('beer'))
pan.add(JButton('get one', actionPerformed=printer))
pan.setMinimumSize(panel.getPreferredSize())

frame.add(pan)
frame.visible = True

ただし、フレームに最小サイズを適用した場合でも、パネルは(JFrameまたはここで)コンポーネントを切断するまで縮小することができます。どうすればこれを防ぐことができますか?(デフォルトのレイアウトマネージャーでは最大のサブコンポーネントのサイズのように見えるので、希望するサイズではないと思いますが、たとえばに変更するとGridBagLayout、フレームに最小サイズを適用して試してみてください)

4

1 に答える 1

3

これを JFrame で使用できます (申し訳ありませんが Java です。私は Jython に詳しくありません)。

frame.setMinimumSize(frame.getPreferredSize());

LayoutManagerのコンテンツ ペインのJFrameが最小サイズを強制する場合、コードが機能する可能性があります。ただし、デフォルトでは取得できBorderLayoutません。を使用frame.setMinimumSize(pan.getPreferredSize());した場合、フレームのサイズにはインセット (つまり、フレームの境界線のサイズ) が含まれるため、設定している最小サイズが実際には小さすぎるため、機能しません。

JFrame で最小サイズを機能させる方法を示す小さなデモを次に示します。

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestMinimumSizeOnFrame {

    protected void initUI() {
        JFrame frame = new JFrame("example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);

        JPanel pan = new JPanel();
        pan.add(new JLabel("Some nice beer"));
        pan.add(new JButton("get one"));
        frame.add(pan);
        frame.setVisible(true);
        frame.setMinimumSize(frame.getPreferredSize());

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestMinimumSizeOnFrame().initUI();
            }
        });
    }

}
于 2012-07-10T13:17:44.500 に答える