Является ли это ошибкой рендеринга Swing Java 7?

Я сделал простое приложение Swing. Но рендеринг ведет себя неправильно. Я сделал что-то неправильно или это ошибка?

Это простой небольшой JFrame с текстовым полем, кнопкой и пустым списком. Если я сначала изменю размер окна горизонтально, а затем введите текстовое поле, кнопка внезапно исчезнет.

Вот мой код:

public class App extends JFrame {

    public App() {

        JTextField messageFld = new JTextField();
        JButton saveBtn = new JButton("Save");

        JPanel inputPanel = new JPanel(new BorderLayout());
        inputPanel.add(messageFld, BorderLayout.CENTER);
        inputPanel.add(saveBtn, BorderLayout.EAST);

        JList<Data> list = new JList<Data>();
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(inputPanel, BorderLayout.NORTH);
        panel.add(list, BorderLayout.CENTER);

        this.getContentPane().add(panel);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Test application");
        this.pack();
        this.setVisible(true);
    }

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

}

Вот несколько скриншотов:

  • При запуске

    enter image description here

  • После горизонтального изменения размера

    enter image description here

  • После типизации нескольких символов в текстовом поле

    enter image description here

  • После перемещения мыши над кнопкой

    enter image description here

Я использую Windows 7, Java 1.7.0 и Eclipse Indigo SR1. Я использовал JDK 1.7.0.0 и теперь обновлен до JDK 1.7.0.10, но у меня все еще такая же проблема.

Когда я печатаю свойства системы, я получаю этот результат:

System.out.println(System.getProperty("java.version"));
System.out.println(System.getProperty("java.runtime.version"));

> 1.7.0_01
> 1.7.0_01-b08

Ответы

Ответ 1

Если проблема вызвана вашим графическим драйвером, может помочь установка одного из системных свойств ниже. Не совсем уверен, поддерживаются ли реквизиты в Java 7.

sun.java2d.d3d=false
sun.java2d.ddoffscreen=false
sun.java2d.noddraw=true

Ответ 2

Я использую eclipse helios service release 2 и java 1.6, и я не получаю эту ошибку; Он отлично работает для меня. Однако это не позволит мне добавлять параметры в JList... возможно, потому, что я использую более старую версию java... так что в основном с моей настройкой и без параметров для JList это работает... Я не уверен, что это поможет вам, но это мои наблюдения.