【发布时间】:2015-12-13 01:58:04
【问题描述】:
如果我将GridLayout 或BoxLayout 用于JTextField 和JLabel 对,它将在文本字段中平均分配JPanel。
看起来像这样:
我想要的看起来像这样(文本字段被挤压到顶部):
我能够在this answer 之后实现这一目标。代码是:
public void forceSize( int szx, int szy, JComponent comp ){
comp.setPreferredSize( new Dimension( szx, szy ) );
comp.setMaximumSize ( new Dimension( szx, szy ) );
comp.setMinimumSize ( new Dimension( szx, szy ) );
};
public void addLabeledBox( String label_str, JTextField valField, JPanel labelPane, JPanel valuePane ){
JLabel label = new JLabel( label_str );
label.setLabelFor( valField );
labelPane.add( label );
forceSize( 100, 20, label );
forceSize( 100, 20, valField );
valuePane.add( valField );
}
public JComponent makeCityPanel( ){
//JPanel labelPane = new JPanel( new GridLayout(0,1) );
//JPanel valuePane = new JPanel( new GridLayout(0,1) );
JPanel labelPane = new JPanel( ); labelPane.setLayout( new BoxLayout( labelPane, BoxLayout.Y_AXIS ) );
JPanel valuePane = new JPanel( ); valuePane.setLayout( new BoxLayout( valuePane, BoxLayout.Y_AXIS ) );
//panel.setLayout(new GridBagLayout());
//panel.setLayout(new GridBagLayout());
name_field = new JTextField( );
addLabeledBox( "name", name_field, labelPane, valuePane );
ix_field = new JFormattedTextField( NumberFormat.getNumberInstance() );
addLabeledBox( "ix", ix_field, labelPane, valuePane);
iy_field = new JFormattedTextField( NumberFormat.getNumberInstance() );
addLabeledBox( "iy", iy_field, labelPane, valuePane);
factorySpace_field = new JFormattedTextField( NumberFormat.getNumberInstance() );
addLabeledBox( "FactorySpace", factorySpace_field, labelPane, valuePane);
storeSpace_field = new JFormattedTextField( NumberFormat.getNumberInstance() );
addLabeledBox( "StoreSapce", storeSpace_field, labelPane, valuePane );
//JScrollPane cityPanel = new JScrollPane( );
JPanel cityPanel = new JPanel(new GridLayout(1,0));
cityPanel.add( labelPane );
cityPanel.add( valuePane );
cityPanel.setSize( 100 , 100 );
return cityPanel;
}
但是,我觉得这不是正确的方法。 (还有here他们说这很糟糕)。
那么有没有更好的办法呢?
【问题讨论】:
标签: java swing user-interface