正常顯示,請參見下面的SSCCE:我使用「系統」外觀和感覺的JTextField在JToolBar中 - 不能在Linux和Windows
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上,但我很好奇結果如何。
,如果你不使用'system'的外觀和感覺,會發生什麼? – 2013-03-18 08:18:13
@JeanHominal好問題。只是用'Metal'的外觀和感覺來試用它,它在Linux上運行良好。 – The111 2013-03-18 08:21:20
在添加組件結束時,不要調用'frame.setBounds(0,0,800,600);'調用'frame.pack()'。另外刪除'toolbar.setMaximumSize(new Dimension(frame.getWidth(),frame.getHeight()));'。 GUI是否像你期望的那樣出現在* nix上? – 2013-03-18 08:38:00