请参阅下面的 SSCCE:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.Box;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.UIManager;
import javax.swing.border.EtchedBorder;
@SuppressWarnings("serial")
public class GlueTest extends JComponent {
private JFrame frame;
private JToolBar toolbar;
private JLabel label_1;
private JTextField textField_1;
private JLabel label_2;
private JTextField textField_2;
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GlueTest window = new GlueTest();
window.frame.setVisible(true);
window.frame.requestFocusInWindow();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public GlueTest() {
initialize();
}
private void initialize() {
frame = new JFrame("Test");
frame.setBounds(0,0,800,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
toolbar = new JToolBar();
toolbar.setFloatable(false);
toolbar.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
toolbar.setMaximumSize(new Dimension(frame.getWidth(), frame.getHeight()));
frame.getContentPane().add(toolbar, BorderLayout.NORTH);
Component horizontalGlue = Box.createHorizontalGlue();
toolbar.add(horizontalGlue);
label_1 = new JLabel(" 1 ");
toolbar.add(label_1);
textField_1 = new JTextField();
textField_1.setColumns(9);
textField_1.setMaximumSize(textField_1.getPreferredSize());
toolbar.add(textField_1);
label_2 = new JLabel(" 2 ");
toolbar.add(label_2);
textField_2 = new JTextField();
textField_2.setColumns(9);
textField_2.setMaximumSize(textField_2.getPreferredSize());
toolbar.add(textField_2);
}
}
请注意,我使用的是“系统”外观。在 Windows 7 中,它显示完美。文本字段自动调整到最大大小,左侧的水平粘连尽可能地增长,迫使它们右对齐。
但是,在 Linux(如果重要的话,Ubuntu 12.04)中,它最终会大不相同。文本字段直接从框架中滚动!水平胶水本身的尺寸太大。
我尝试了其他几种不同的方法来让它在两者中正确显示,但没有运气。事实上,我能让它在 Linux 中正确显示的唯一方法是删除文本字段的所有样式(最大宽度、列等),然后它成功地不滚动框架,但它没有用,因为它只有几个像素的宽度。
作为旁注,我什至没有机会尝试 Mac OS,但我很好奇结果如何。