我想要定製一個JTree有一個黑暗的背景和光前景。我的問題可以看出,在下面的截圖:Linux上的JTree背景色與系統的外觀和感覺
我到底是什麼了,是部分自定義的背景(白旨在也是黑色)。這個問題似乎發生在使用OpenJDK 7的Ubuntu Linux 12.04上。在Windows或Mac上它看起來沒問題。另外,如果我切換到跨平臺的外觀和感覺,那也沒關係。下面是示例代碼:
package com.tt.examples;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultTreeCellRenderer;
@SuppressWarnings("serial")
public class TreeExample extends JFrame {
private TreeExample() {
setTitle("TreeExample");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(320, 240);
setLayout(new GridLayout(1, 1));
JTree tree = new JTree();
tree.setBackground(Color.BLACK);
tree.setCellRenderer(new CustomTreeCellRenderer());
JScrollPane scrollPane = new JScrollPane(tree);
scrollPane.setBackground(Color.BLACK);
add(scrollPane);
setVisible(true);
}
private class CustomTreeCellRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
setBackground(Color.BLACK);
setBackgroundNonSelectionColor(Color.BLACK);
setBackgroundSelectionColor(Color.GRAY);
setBorderSelectionColor(Color.GRAY);
setForeground(Color.WHITE);
return (this);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
// UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace(System.err);
}
new TreeExample();
}
});
}
}
更新:在測試了最新的Linux Mint的與Oracle JDK 7和8,並且似乎顯示OK(按預期)那裏。
更新:在Ubuntu 12.04上使用Oracle JDK 8(更新25)進行了測試,但仍然沒有運氣,所以它看起來不是JDK。
示例代碼工作正常,在OS X上也許嘗試調用:'tree.setOpaque(true)'。 – 2014-10-19 20:08:44
嘗試過'tree.setOpaque(true)',但沒有區別。 – 2014-10-19 20:11:48
這會令我感到驚訝,但設置LaF後試試這個:'UIManager.put(「Tree.background」,Color.BLACK);' – 2014-10-19 20:13:56