相关疑难解决方法(0)

改变Nimbus LaF处理JTree节点突出显示的方式

尽管有Nimbus的弱点,我一直在努力将Java应用程序从WindowsLookAndFeel过渡到Nimbus,主要是成功的.我的用户总体上喜欢Nimbus LaF,但不喜欢一些细节,其中一些我通过咨询本网站上的问题而改变了.示例:我从Windows LaF(他们喜欢)复制了LeafIcon,ClosedIcon和OpenIcon,并在Nimbus版本中使用它们,以获得LaF的良好组合.

坚持最后一个(?)问题.

我有一个带有子类DefaultCellRenderer的JTree来创建适当的节点显示.这在WindowsLookAndFeel下工作正常.

问题:在WindowsLaF下,当选择节点时,节点的文本会突出显示,并且效果在视觉上易于理解.在Nimbus下选择一个节点时,突出显示是用一条(相当暗的)颜色条来完成的,它运行树窗的宽度(不仅仅是文本的宽度),效果令人不安.

所以:我只想在Nimbus LaF中使用WindowsLaF处理JTree节点突出显示(即彩色背景只有文本的宽度,最好是我可以选择的更好的颜色).我怀疑这意味着我需要将正确的排序画家分配给"Tree:TreeCell [Focused + Selected] .backgroundPainter",但我不知道如何编写它.

建议最受欢迎.


编辑

使用Java 7查看奇怪的选定节点突出显示!

在此输入图像描述

public class TreeBorder {
    public static void main( String[] args ) {
        try{
            for( UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels() ) {
                if( "Nimbus".equals( info.getName() ) ) {
                    UIManager.setLookAndFeel( info.getClassName() );
                    break;
                }
            }
        } catch( Exception e ) {
            e.printStackTrace();
        }
        SwingUtilities.invokeLater( new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setLocationRelativeTo( null );
                f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
                f.getContentPane().add( getJTree() );
                f.pack(); …
Run Code Online (Sandbox Code Playgroud)

java swing renderer jtree nimbus

8
推荐指数
1
解决办法
1780
查看次数

TreeCellRenderer:如何设置背景颜色?

我编写了一个自定义的TreeCellRenderer来更改组件外观.一切正常,但setBackground没有效果.代码肯定是执行的,因为前景色总是正确地改变.由于所选项目以蓝色呈现并且取消选择白色项目(没有自己编写该代码),我认为我的更改被JTree覆盖.那么改变背景颜色的正确方法是什么?

这基本上是我的代码:

JTree tree = new JTree(); 
tree.setCellRenderer(new MyCellRenderer()); 

///////

public class MyCellRenderer extends DefaultTreeCellRenderer{

   @Override
   public Component getTreeCellRendererComponent(JTree tree, Object value,
        boolean isSelected, boolean expanded, boolean leaf, int row,
        boolean hasFocus) {

    JComponent c = (JComponent) super.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, hasFocus);
      DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; 
      MyData data = (MyData)node.getUserObject();   
      if(data.isX()){
          c.setForeground(Color.blue); 
          c.setBackground(Color.gray); 
      }
      return c; 
    }
}
Run Code Online (Sandbox Code Playgroud)

java swing jtree

5
推荐指数
1
解决办法
2938
查看次数

标签 统计

java ×2

jtree ×2

swing ×2

nimbus ×1

renderer ×1