прямо сейчас я устанавливаю Nimbus Look and Feel для приложения, которое уже используется в течение некоторого времени. Приложение содержит несколько JTree
, которые я хочу отображать вертикальными и горизонтальными линиями.
В версии Java 1.7, которую я использовал ранее, это было легко настроить с помощью этих конкретных записей в UIDefaults
:
UIManager.put("Tree.drawVerticalLines", true);
и
UIManager.put("Tree.drawHorizontalLines", true);
Как указано выше, это работает совершенно нормально, пока я использую jre с версией 1.7, как только я использую 1.8, вертикальные линии в JTree
не будут отображаться.
Я просто хотел спросить, знает ли кто-нибудь, является ли это известной проблемой Nimbus под java 1.8, и если да, то знает ли кто-нибудь решение или обходной путь этой проблемы?
РЕДАКТИРОВАТЬ: Вот пример кода, чтобы прояснить мою проблему:
public class test
{
public static void main(String args[]) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException
{
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
| UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
UIManager.put("Tree.drawVerticalLines", true);
UIManager.put("Tree.drawHorizontalLines", true);
UIManager.put("Tree.linesStyle", "dashed");
DefaultMutableTreeNode top = new DefaultMutableTreeNode("Root");
top.add(new DefaultMutableTreeNode("Branch1"));
top.add(new DefaultMutableTreeNode("Branch2"));
top.add(new DefaultMutableTreeNode("Branch3"));
((DefaultMutableTreeNode)top.getFirstChild()).add(new DefaultMutableTreeNode("Leaf1"));
((DefaultMutableTreeNode)top.getFirstChild()).add(new DefaultMutableTreeNode("Leaf2"));
JFrame frame = new JFrame();
JTree tree = new JTree(top);
frame.setSize(new Dimension(450,300));
JScrollPane scroll = new JScrollPane(tree);
frame.add(scroll);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Это всего лишь пример кода, а не фактическое программное обеспечение, над которым я сейчас работаю, поэтому я думаю, что проблема связана с ошибкой, которую я сделал в обоих кодах, или с какой-то проблемой с java-версией 1.8.
Использование jdk1.7 и jdk1.8 приводит к двум разным результатам:
jdk1.7
jdk1.8
Как видите, горизонтальные линии в версии 1.8 отсутствуют.
Извините за плохую грамматику, я не носитель языка.