8

コンポーネントの外観を変更するために、カスタム 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; 
    }
}
4

1 に答える 1