Рендеринг Swing выглядит сломанным в JDK 1.8, правильно в JDK 1.7
Я установил IntelliJ IDEA (13.1.1 #IC-135.480) и JDK 1.8.0 (x64), и я создал некоторый графический интерфейс с помощью конструктора форм GUI.
затем я запустил код и понял, что что-то не так.
вот скриншот моего GUI:
рендеринг шрифта, кажется, не в порядке. Кроме того, кнопка теряет свой текст, когда я наведу на него курсор мыши.
поэтому я установил JDK 1.7.0_40 (x64), перекомпилировал проект и запустил его снова.
следующая форма появляется, когда я использую JDK 1.7:
рендеринг, кажется, в порядке, и кнопка также в порядке.
поэтому я установил новейшие графические и чипсетные драйверы и многое другое, но проблема все еще существует.
У вас когда-нибудь были такие проблемы с Java Swing UIs? Не могли бы вы помочь мне решить мои проблемы?
Любая помощь будет очень признательна.
обновление:
Я создал небольшой проект только с 1 JTextArea и 1 JButton и у меня есть те же проблемы рендеринга.
согласно Эндрю Томпсону я изменил setSize () и начинаю с EDT. Пример ниже:
package at.maeh.java.client.simpleTextClient;
import javax.swing.*;
import java.awt.*;
public class SimpleClient extends JFrame {
private JPanel panel1;
private JTextArea textArea1 = new JTextArea();
private JButton button1 = new JButton();
public SimpleClient() {
super("SimpleClient");
// Panel
panel1 = new JPanel();
panel1.setLayout(new FlowLayout());
// BUtton
button1.setText("TestButton");
// TextArea
textArea1.setColumns(40);
textArea1.setRows(15);
// Add Components
panel1.add(textArea1);
panel1.add(button1);
// Add to Frame
this.getContentPane().add(panel1);
// pack and set Visible
pack();
setVisible(true);
System.out.println("Constructor EDT: " + SwingUtilities.isEventDispatchThread());
}
public static void main(String[] args) {
SwingUtilities.invokeLater(SimpleClient::new);
System.out.println("Main EDT: " + SwingUtilities.isEventDispatchThread());
}
}
результатом является простой JFrame с компонентами в нем.
когда я пишу какой-то текст или moove мой указатель мыши над кнопкой компоненты получают визуализацию следующим образом (текст: testsentence.123; Button-Label: TestButton)
8 ответов:
для тех, чья проблема не решена, попробуйте это решение:
установите глобальную переменную среды "J2D_D3D" в значение "false" внутри ОС. Согласно Sun, этот параметр используется для отключения использования системы Java 2D Direct3D в Java 1.4.1_02 и более поздних версиях.
ie: просто создайте переменную среды с именем " J2D_D3D "и значением" false " без кавычек.
это решило мои проблемы с рендерингом, надеюсь, что и ваши тоже.
наконец-то я нашел решение своей проблемы. Мне пришлось изменить настройки управления энергией моего NVIDIA GeForce 620M до максимальной производительности.
вы можете выполнить следующие действия:
- щелкните правой кнопкой мыши на рабочем столе и выберите Панель управления NVIDIA
- выберите "Управление 3D-настройками" в левой панели
- выберите вкладку "Настройки программы" в главном окне
- Нажмите 'Добавить'
- перейдите в папку java (C:\Program Files\Java\jre1.8.0_20\bin) и выберите javaw.exe и нажмите "Открыть" (этот шаг, вероятно, будет зависеть от вашей операционной системы, но должен быть довольно легко найти)
- где он говорит: "выберите предпочтительный графический процессор для этой программы" нажмите раскрывающийся список и выберите "высокопроизводительный процессор NVIDIA"
- Нажмите кнопку "Применить" в правом нижнем углу, и вы хорошо идти.
У меня точно такая же проблема. Что я нашел после настройки качества duffys adjustion:
мой ноутбук работает как с Intel HD 4000, так и с NVS 5200M. запуск приложений Swing с Java 7 отлично подходит для обеих карт. С Java 8 Swing GUI, отображаемые картой Intel (независимо от настроек качества), выглядят разрушенными (как на скриншоте duffys), используя NVS 5200M, они выглядят так же, как и раньше.
не удалось найти ничего на Java bug tracker, с другой стороны, это трудно опишите эту ошибку.
textArea1.setSize(500, 300);
есть проблема. Java-графические интерфейсы могут работать на нескольких платформах, на разных разрешениях экрана и с использованием разных Плафов. Как таковые они не способствуют точному размещению размер компонентов. Чтобы организовать компоненты для надежного графического интерфейса, вместо этого используйте менеджеры макетов или комбинаций из них1, вместе с прокладкой макета и границами для пробел2.
аналогичное исправление для duffy356:
Lenovo T430s работает под управлением Windows 7 64 бит с NVIDIA NVS 5200M наряду с HD 4000. Обновление до Java 8 update 5 создано графика и коррупция кнопки для двух приложений Swing, jEdit и Freemind.
использование апплета панели управления NVIDIA для изменения глобальных настроек режима управления питанием на "предпочитаю максимальную производительность" похоже, что он исправил эту проблему.
Не уверен, что есть скрытая проблема с тем, как установлены приложения размеры.
действия:
- панель управления
- система и безопасность
- система
- параметры удаленного доступа
- вкладка
- нажмите кнопку переменные среды
- создать переменную J2D_D3D
- и установите значение false.
работал для меня....
Comments