2017-10-04 9 views
-1

JPANELS:NORTH(グリーン)、WEST(レッド)、CENTER(グレー)、SOUTH(ブルー)の4つが追加されたBorderlayoutのメインJPanelを持っています。 WEST(Red)Jpanelの幅のサイズを小さくしたい、またはCenter(Gray)Jpanelの幅のサイズを大きくしたい。BorderLayoutでJpanelsの幅のサイズを変更する方法は?

スクリーンショット:ここ

https://i.stack.imgur.com/at5GA.png

私のコードです:私はWESTの幅サイズ(レッド)を減らしたい

frame = new JFrame("FreshPos baza podataka"); 
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

    // Main paneel 
    JPanel panel = new JPanel();   
    panel.setLayout(new BorderLayout()); 
    panel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); 
    frame.getContentPane().add(panel); 

    //West panel; 
    JPanel panelWest = new JPanel(new GridLayout(14,0,0,2)); 
    panelWest.setPreferredSize(new Dimension(300, 300));  
    panelWest.setBorder(BorderFactory.createEmptyBorder(100,0,0,0)); 
    panel.add(panelWest, BorderLayout.WEST); 
    panelWest.setBackground(Color.red); 

    for (int i = 0; i < MAX_TABLES; i++) {   
     buttonsTables[i] = new JButton(tables[i]);   
     buttonsTables[i].setMaximumSize(new Dimension(Integer.MAX_VALUE, buttonsTables[i].getMinimumSize().height)); 
     panelWest.add(buttonsTables[i]);    
     panelWest.add(Box.createVerticalStrut(10));   
    }  

    //South panel; 
    JPanel southPanel = new JPanel(); // Donji layout za dugmice  
    southPanel.setBorder(BorderFactory.createEmptyBorder(20,0,0,0)); 
    panel.add(southPanel, BorderLayout.SOUTH); 
    southPanel.setBackground(Color.BLUE); 

    JButton buttonDodaj = new JButton("Dodaj"); 
    southPanel.add(buttonDodaj);   
    JButton buttonIzmeni = new JButton("Izmeni"); 
    southPanel.add(buttonIzmeni);  
    JButton butonObrisi = new JButton("Obrisi"); 
    southPanel.add(butonObrisi); 

    //North panel;  
    JPanel northPanel = new JPanel(); // Donji layout za dugmice 
    northPanel.setBorder(BorderFactory.createEmptyBorder(0,10,0,0)); 
    panel.add(northPanel, BorderLayout.NORTH); 
    northPanel.setBackground(Color.green); 

    JButton buttonImport = new JButton("Importuj fajl"); 
    buttonImport.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      importActionPerformed(evt); 
     }   
    }); 
    northPanel.add(buttonImport, BorderLayout.WEST); 

    JButton ButtonRecord = new JButton("Snimi fajl"); 
    northPanel.add(ButtonRecord, BorderLayout.WEST); 

    // Central panel   
    JPanel centerPanel = new JPanel(new BorderLayout()); 
    centerPanel.setBackground(Color.GRAY); 
    panel.add(centerPanel, BorderLayout.CENTER); 

答えて

2

のJPanel

panelWest.setBorder(BorderFactory.createEmptyBorder(100,0,0,0)); 

なぜあなたのボーダーの幅がそれほど大きいのですか?

境界線は、コンポーネントの周りの余分なスペース用です。

したがって、パネルの幅は、ボタンの幅に境界の幅を足したものになります。

編集:

panelWest.setPreferredSize(新次元(300、300));

推奨サイズをハードコードしないでください。レイアウトマネージャは、上記のロジックに基づいてサイズを計算します。その声明を取り除く。

編集2:

// buttonsTables[i].setMaximumSize(new Dimension(Integer.MAX_VALUE, buttonsTables[i].getMinimumSize().height)); 

コンポーネントのサイズを制御しようとする任意のロジックを取り除きます。レイアウトマネージャを使用するポイントは、レイアウトマネージャにサイズの計算をさせることです。

ボタンパネルでは、ボタンがすべてのスペースを取らないようにパネルをネストする必要があります。 JPanelのは、それに追加されたコンポーネントの推奨サイズを尊重しますFlowLayoutのを使用してデフォルトで

JPanel wrapper = new JPanel(); 
wrapper.add(buttonsPanel); 
... 
//panel.add(panelWest, BorderLayout.WEST); 
panel.add(wrapper, BorderLayout.WEST); 

あなたのような何かを行うことができます。

また、ラッパーパネルでGridBagLayoutを使用することもできます。デフォルトでは、パネルは利用可能なスペースの中央に表示されます。したがって、それは垂直に中心が置かれ、EmptyBorderは必要ありません。

+0

いいえ、それはy軸の要素の位置です。 –

+0

私はその線の要素がy軸上の画面の先頭から始まるとコメントします。 –

+0

@NikolaBozic、Ok、パラメータの順序が混ざっています。編集を参照してください。 – camickr

関連する問題