Неверные границы Java 1.8
У меня возникают проблемы с границами swing после перехода с Java 1.7 на Java 1.8:
На всех моих кнопках мне нужен сплошной фоновый цвет и сплошная граница, поэтому я определил, что через UIManager. На Java 1.7 и предыдущих версиях все выглядит хорошо, но на Java 1.8 граница все испортилась. Также RadioButton выглядит очень странно и неровно. У CheckBoxes также есть проблема.
Для демонстрации я создал короткий образец с несколькими компонентами:
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
public class CompDemo extends JFrame
{
public CompDemo()
{
setLayout(new FlowLayout());
add(new JButton("button"));
add(new JTextField("txt"));
add(new JComboBox<String>());
add(new JRadioButton("radio"));
add(new JToggleButton("toggle"));
add(new JCheckBox("check"));
pack();
setVisible(true);
}
public static void main(String[] args)
{
UIManager.put("Button.background", Color.LIGHT_GRAY);
UIManager.put("Button.border", BorderFactory.createCompoundBorder(BorderFactory
.createLineBorder(Color.RED), BorderFactory.createLineBorder(Color.CYAN)));
new CompDemo();
}
}
Здесь вы можете увидеть выходные данные с различными версиями JDK (до 200% без сглаживания):
Первая из них - Java 7u60 и отображает все правильное.
На втором снимке я обвел эти различия.
Третий - с Java 8u11, и, как вы видите, границы довольно перепутаны (и стрелка вниз также выглядит странно).
![http://imgur.com/K4df1Lg]()
Я использовал голубой LineBorder внутри красного LineBorder, чтобы вы могли видеть проблему более четко.
Моя ОС - это Windows 8 x64, если это имеет значение.
Может ли кто-нибудь сказать мне, почему это выглядит так на Java 8? Я что-то пропустил или действительно испортил границы в Java 1.8?
Должен ли я записывать сообщение об ошибке? Или есть только несколько настроек, которые нужно сделать, чтобы снова выглядеть хорошо?
Спасибо,
дс
Ответы
Ответ 1
Спасибо за ваши ответы.
Я провел несколько дальнейших испытаний. На виртуальной машине, работающей под управлением Win7 и Java 8, она также выглядела неплохо, а также на другой, работающей под Win8 и Java 8.
Изменение видеокарты на максимальную производительность также ничего не изменило. Но на основании этого я сделал еще несколько исследований и, наконец, выяснил причину проблемы:
Мой ноутбук (ThinkPad T540p) имеет 2 видеокарты: встроенный Intel GMA 4600 и внешнюю карту Nvidia. Похоже, OS/driver может решить, какую графическую карту использовать для отображения и даже для каких приложений. За исключением 3D-приложений, я думаю, что в основном используется карта Intel - я думаю, по соображениям энергоэффективности (даже если она не работает от батареи).
На панели управления Nvidia я могу настроить, что конкретное приложение всегда должно использовать определенную графическую карту, поэтому я определил, что Java всегда должна использовать графическую карту Nvidia, и это, похоже, решило проблему: с картой Nvidia, все выглядит хорошо.