2012-01-17 49 views
3

我希望數據,視圖和格式組具有與運動控件相同的寬度。我試過setMinimumSize(new Dimension(250,30))但它沒有效果。如何讓所有這些擺動控件具有相同的寬度?

enter image description here

class DeeLiteControlPanel extends JPanel 
{ 
    public DeeLiteControlPanel() 
    { 
     setBounds(0, 140, 250, 550); 
     JPanel dataGroup = createGroupWithName("Data"); 

     add(dataGroup); 

     JButton loadBtn = new JButton("Load data"); 
     dataGroup.add(loadBtn); 

     JPanel viewGroup = createGroupWithName("View"); 
     viewGroup.setLayout(new BorderLayout(5, 5)); 
     add(viewGroup); 

     JButton skyBtn = new JButton("View from sky"); 
     viewGroup.add(skyBtn, BorderLayout.NORTH); 

     final JToggleButton chaseBtn = new JToggleButton("Chase Vehicle"); 
     viewGroup.add(chaseBtn, BorderLayout.EAST); 

     _vehicleList = new JComboBox(); 
     _vehicleList.setEditable(false); 
     viewGroup.add(_vehicleList, BorderLayout.WEST); 

     JButton fitToWinBtn = new JButton("Fit to Window"); 
     viewGroup.add(fitToWinBtn, BorderLayout.SOUTH); 

     JPanel formattingGroup = createGroupWithName("Formatting"); 
     formattingGroup.setMinimumSize(new Dimension(250, 20)); 
     formattingGroup.setLayout(new GridLayout(5, 0)); 
     add(formattingGroup); 

     final JCheckBox showSurface = new JCheckBox("Show surface"); 
     showSurface.setSelected(true); 
     formattingGroup.add(showSurface); 

     final JCheckBox showTerrain = new JCheckBox("Show terrain"); 
     showTerrain.setSelected(true); 
     formattingGroup.add(showTerrain); 

     final JCheckBox showVehicleStatus = new JCheckBox("Show vehicle status"); 
     showVehicleStatus.setSelected(true); 
     formattingGroup.add(showVehicleStatus); 

     JPanel pnl = createGroupWithName("Depth Stretch"); 
     formattingGroup.add(pnl); 
     JSlider slider = new JSlider(0, 10); 
     pnl.add(slider); 
    } 

    public static JPanel createGroupWithName(String name) 
    { 
     JPanel pnl = new JPanel(); 
     pnl.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), name)); 
     pnl.setMinimumSize(new Dimension(250, 30)); 
     return pnl; 
    } 
} 
+2

擺脫所有'setBounds()'。使用BoxLayout進行整體佈局。 – 2012-01-17 03:08:04

回答

3

設置GridBagLayoutDeeLiteControlPanel或致電setPreferredSize()方法對所有面板 - 數據,查看和格式化。

class DeeLiteControlPanel extends JPanel 
{ 
    public DeeLiteControlPanel() 
    { 
     setLayout(new GridBagLayout()); 
     GridBagConstraints gs=new GridBagConstraints(); 

     gs.anchor=GridBagConstraints.NORTHWEST; 
     gs.fill=GridBagConstraints.BOTH; //or HORIZONTAL 

     gs.gridx=0; 
     gs.gridy=0; 
     add(dataGroup,gs); 

     gs.gridx=0; 
     gs.gridy=1; 
     add(viewGroup,gs); 
     .... 
    } 
    } 
5

擺脫所有使用setBounds(...)和考慮使用的BoxLayout主的JPanel:

public DeeLiteControlPanel() { 
    // setBounds(0, 140, 250, 550); 
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 

例如,

import java.awt.*; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class DeeLiteControlPanel extends JPanel { 
    public DeeLiteControlPanel() { 
     // setBounds(0, 140, 250, 550); 
     setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 

     JPanel dataGroup = createGroupWithName("Data"); 


     add(dataGroup); 

     JButton loadBtn = new JButton("Load data"); 
     dataGroup.add(loadBtn); 

     JPanel viewGroup = createGroupWithName("View"); 
     viewGroup.setLayout(new BorderLayout(5, 5)); 
     add(viewGroup); 

     JButton skyBtn = new JButton("View from sky"); 
     viewGroup.add(skyBtn, BorderLayout.NORTH); 

     final JToggleButton chaseBtn = new JToggleButton("Chase Vehicle"); 
     viewGroup.add(chaseBtn, BorderLayout.EAST); 

     JComboBox _vehicleList = new JComboBox(); 
     _vehicleList.setEditable(false); 
     viewGroup.add(_vehicleList, BorderLayout.WEST); 

     JButton fitToWinBtn = new JButton("Fit to Window"); 
     viewGroup.add(fitToWinBtn, BorderLayout.SOUTH); 

     JPanel formattingGroup = createGroupWithName("Formatting"); 
     formattingGroup.setMinimumSize(new Dimension(250, 20)); 
     formattingGroup.setLayout(new GridLayout(5, 0)); 
     add(formattingGroup); 

     final JCheckBox showSurface = new JCheckBox("Show surface"); 
     showSurface.setSelected(true); 
     formattingGroup.add(showSurface); 

     final JCheckBox showTerrain = new JCheckBox("Show terrain"); 
     showTerrain.setSelected(true); 
     formattingGroup.add(showTerrain); 

     final JCheckBox showVehicleStatus = new JCheckBox("Show vehicle status"); 
     showVehicleStatus.setSelected(true); 
     formattingGroup.add(showVehicleStatus); 

     JPanel pnl = createGroupWithName("Depth Stretch"); 
     formattingGroup.add(pnl); 
     JSlider slider = new JSlider(0, 10); 
     pnl.add(slider); 
    } 

    public static JPanel createGroupWithName(String name) { 
     JPanel pnl = new JPanel(); 
     pnl.setBorder(BorderFactory.createTitledBorder(
      BorderFactory.createEtchedBorder(), name)); 
     pnl.setMinimumSize(new Dimension(250, 30)); 
     return pnl; 
    } 

    private static void createAndShowGui() { 
     DeeLiteControlPanel mainPanel = new DeeLiteControlPanel(); 

     JFrame frame = new JFrame("DeeliteControlPanel"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
1

,如果你是到它,你可以使用強大的GroupLayout。它非常完美,可以很好地控制組件的大小,以及如何將它們的尺寸綁定在一起。儘管我讓Netbeans照顧所有這些。

相關問題