[英]How to change width size of Jpanels in BorderLayout?
我有一個主JPanel,它是Borderlayout,添加了4個JPANELS:NORTH(綠色),WEST(紅色),CENTER(灰色),SOUTH(藍色)。 我想減小WEST(Red)Jpanel的寬度大小,或增加Center(Grey)Jpanel的寬度大小。
屏幕截圖:
這是我的代碼:
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);
我想減小WEST(Red)Jpanel的寬度尺寸
panelWest.setBorder( BorderFactory.createEmptyBorder(100,0,0,0) );
那么,為什么邊框的寬度這么大?
邊框用於組件周圍的“額外”空間。
因此,面板的寬度是按鈕的寬度加上邊框的寬度。
編輯:
panelWest.setPreferredSize(new Dimension(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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.