2010-08-01 6 views
2

Я делаю графический интерфейс с помощью SpringLayout, используя следующий код:SpringLayout работает в Windows 7, но не в NetBSD?

private void createAndShowGUI() { 
    frame = new JFrame("A GUI"); 
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
    frame.setResizable(false); 

    Container contentPane = frame.getContentPane(); 
    SpringLayout layout = new SpringLayout(); 
    contentPane.setLayout(layout); 

    contentPane.add(this); 
    layout.putConstraint(SpringLayout.WEST, this, 300, SpringLayout.WEST, contentPane); 
    layout.putConstraint(SpringLayout.NORTH, this, 0, SpringLayout.NORTH, contentPane); 

    JLabel startLabel = new JLabel("Start Node:"); 
    contentPane.add(startLabel); 
    layout.putConstraint(SpringLayout.WEST, startLabel, 5, SpringLayout.WEST, contentPane); 
    layout.putConstraint(SpringLayout.NORTH, startLabel, 5, SpringLayout.NORTH, contentPane); 

    startNodes = new JComboBox(); 
    contentPane.add(startNodes); 
    layout.putConstraint(SpringLayout.WEST, startNodes, 15, SpringLayout.WEST, contentPane); // THIS LINE 
    layout.putConstraint(SpringLayout.EAST, startNodes, -10, SpringLayout.WEST, this); // AND THIS ONE 
    layout.putConstraint(SpringLayout.NORTH, startNodes, 5, SpringLayout.SOUTH, startLabel); 

    layout.putConstraint(SpringLayout.EAST, contentPane, 0, SpringLayout.EAST, this); 
    layout.putConstraint(SpringLayout.SOUTH, contentPane, 0, SpringLayout.SOUTH, this); 

    frame.pack(); 
    frame.setVisible(true); 
}` 

Когда я запускаю его (на NetBSD), то две строки комментария, кажется, борются друг с другом. Когда у меня только первый, он выравнивается слева, как и ожидалось, но когда я добавляю второй, он выравнивается вправо, а не растягивается вправо, как я ожидал.

Странно, что он отлично работает на Windows 7 Pro 32bit.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

+1

Какие версии JRE/JDK вы используете на платформах? Поведение может различаться между версиями (хотя обычно это ошибка). – sleske

+0

А, хороший момент. В системе NetBSD она составляет 1,5, тогда как в системе Windows 7 я думаю, что это последняя версия 1.6 или что-то в этом роде. Может ли это иметь другую версию? В документации говорится, что SpringLayout существует с 1.4. – DanielGibbs

ответ

3

Оказалось, что в Java 1.5 вам всегда нужно указывать ограничения EAST/SOUTH перед ограничениями WEST/NORTH. В противном случае он неправильно позиционирует компоненты. Эта ошибка исправлена ​​в версии 1.6, поэтому я не заметил ее на своей Windows-машине.