2017-11-30 19 views
0

私は現在私の研究のためのプロジェクトに取り組んでいますが、私はGUIに関して少し問題があります。ここでBoxLayoutのコンテナはコンポーネントごとにサイズが変更されます

はいくつかのコードです:

private JButton zoomUp, zoomDown; 
private JComboBox fractalList; 
private JLabel choice,space; 
private JPanel ui,display; 
private JFrame window; 
    public FractalView(FractalModel m, FractalController c, String title, int size_X, int size_Y) 
    { 
    window =new JFrame(); 
    window.setTitle(title); 
    window.setSize(size_X,size_Y); 
    window.setLocationRelativeTo(null); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setResizable(false); 
    window.setLayout(new GridBagLayout()); 


    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.anchor=GridBagConstraints.FIRST_LINE_START; 

    ui=new JPanel();   
    ui.setBackground(Color.GRAY); 
    ui.setBorder(BorderFactory.createTitledBorder("Interface de Controle et Options")); 
    BoxLayout uiLayout = new BoxLayout(ui, BoxLayout.PAGE_AXIS); 
    ui.setLayout(uiLayout); 
    ui.setMaximumSize(ui.getPreferredSize()); 

    zoomUp = new JButton("Zoom +"); 
    zoomUp.setAlignmentX(LEFT_ALIGNMENT); 
    zoomUp.setBorder(BorderFactory.createLineBorder(Color.RED)); 
    ui.add(zoomUp); 
    zoomDown = new JButton("Zoom -"); 
    //ui.add(zoomDown); 
    choice = new JLabel("Choisir une fractale : "); 
    //ui.add(choice); 
    Object[] elements = new Object[]{"Mandelbrot", "Julia", "Buddhabrot"}; 
    fractalList = new JComboBox<Object>(elements); 
    //fractalList.setBorder(BorderFactory.createLineBorder(Color.RED)); 
    fractalList.setAlignmentX(LEFT_ALIGNMENT); 
    fractalList.setMaximumSize(new Dimension(Short.MAX_VALUE,20)); 
    //ui.add(fractalList); 



    gbc.weighty=1; 
    gbc.ipadx=300; 
    gbc.gridheight=1; 
    gbc.fill=GridBagConstraints.VERTICAL; 
    gbc.gridx=0; 
    gbc.gridy=0; 

    window.add(ui,gbc); 

    display=new JPanel(); 
    display.setBackground(Color.RED); 
    gbc.weightx=1; 
    gbc.gridheight=1; 
    gbc.gridwidth=1; 
    gbc.fill=GridBagConstraints.BOTH; 
    gbc.gridx=1; 
    gbc.gridy=0; 
    window.add(display,gbc); 
    window.setVisible(true); 
    } 

問題がJPanel uiから来ています。それが空である限り、サイズは望み通りです。しかし、私はそれに重量を増やすコンポーネントを追加します。

setMaxSize()を使用しようとしましたが、サイズが変更されても、JPanel displayに表示したい問題が発生する可能性があります。もう一度GridBagLayoutを使わないでください。

誰かがアイデアを持っていますか?

+0

1)* "ここにいくつかのコードがあります:" *より良いヘルプのためには、[MCVE]または[ショート、自己完結型、正しい例](http://www.sscce.org/)を投稿してください。 2)最小のサイズでGUIの*意図された*レイアウトのアスキーアートまたは簡単な図面を提供し、余分なスペースをどのように使用すべきかを示すために、より幅と高さの変更が可能な場合。 3)* "再び' GridBagLayout'を使用しないことを望みます。* *次のような読み方* "私はスクリュードライバーを避ける方がいいですか?ジョブには適切なツールを使用します。私はそれがここGBLであるかどうかはわかりませんが、それを除外しないでください。 –

答えて

0

フレームを分割したいだけで、GridBagLayoutとの戦いをしたくない場合は、BorderLayoutを使用できます。

次に、1つのパネルをBorderLayout.WESTに追加し、もう1つをBorderLayout.EAST位置に追加します。また、setPreferredSizeを呼び出して、希望の幅と高さを修正することを忘れないでください。

私はあなたのコードをいくつか変更しました。それをチェックアウト:

public class TestFrame { 
    private JButton zoomUp, zoomDown; 
    private JComboBox fractalList; 
    private JLabel choice, space; 
    private JPanel ui, display; 
    private JFrame window; 

    public TestFrame(String title, int size_X, int size_Y) { 
     window = new JFrame(); 
     window.setTitle(title); 
     window.setSize(size_X, size_Y); 
     window.setLocationRelativeTo(null); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setResizable(false); 
     window.setLayout(new BorderLayout()); 

     ui = new JPanel(); 
     ui.setPreferredSize(new Dimension(size_X/2,size_Y)); 
     ui.setBackground(Color.GRAY); 
     ui.setBorder(BorderFactory.createTitledBorder("Interface de Controle et Options")); 
     BoxLayout uiLayout = new BoxLayout(ui, BoxLayout.PAGE_AXIS); 
     ui.setLayout(uiLayout); 

     zoomUp = new JButton("Zoom +"); 
     // zoomUp.setAlignmentX(LEFT_ALIGNMENT); 
     zoomUp.setBorder(BorderFactory.createLineBorder(Color.RED)); 
     ui.add(zoomUp); 
     zoomDown = new JButton("Zoom -"); 
     ui.add(zoomDown); 
     choice = new JLabel("Choisir une fractale : "); 
     ui.add(choice); 
     Object[] elements = new Object[] { "Mandelbrot", "Julia", "Buddhabrot" }; 
     fractalList = new JComboBox<Object>(elements); 
     // fractalList.setBorder(BorderFactory.createLineBorder(Color.RED)); 
     // fractalList.setAlignmentX(LEFT_ALIGNMENT); 
     fractalList.setMaximumSize(new Dimension(Short.MAX_VALUE, 20)); 
     ui.add(fractalList); 

     window.add(ui, BorderLayout.WEST); 

     display = new JPanel(); 
     display.setBackground(Color.RED); 
     display.setPreferredSize(new Dimension(size_X/2,size_Y)); 

     window.add(display, BorderLayout.EAST); 
     window.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new TestFrame("test of BorderLayout with WEST and EAST", 800, 600); 
    } 
} 

あなたはそれよりも複雑な何かが必要な場合は、miglayoutで行くことができます。

関連する問題