2017-10-04 40 views
-1

我有主要JPanel是Borderlayout增加了4個JPANELS:NORTH(綠色),WEST(紅色),CENTER(灰色),SOUTH(藍色)。我想減小WEST(紅色)Jpanel的寬度尺寸,或者增加中心(灰色)Jpanel的寬度尺寸。如何更改BorderLayout中Jpanels的寬度大小?

截圖:

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

這裏是我的代碼:

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

我想減少WEST的寬度尺寸(紅色)的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 wrapper = new JPanel(); 
wrapper.add(buttonsPanel); 
... 
//panel.add(panelWest, BorderLayout.WEST); 
panel.add(wrapper, BorderLayout.WEST); 

默認情況下,一個JPanel使用FlowLayout中,將尊重添加到它的任何組件的首選尺寸。

另一種選擇是在封裝面板上使用GridBagLayout。默認情況下,面板將顯示在可用空間的「中心」。所以它會垂直居中,你不需要EmptyBorder。

+0

沒有先生,那只是元素在y軸上的位置。 –

+0

當我評論說,線元素剛剛從y軸上的屏幕頂部開始.. –

+0

@NikolaBozic,好的,我得到了參數混合的順序。請參閱編輯。 – camickr

相關問題