2015-07-29 3 views
-1

Я видел много сообщений & вопросов, связанных с раскраской JTree. Но я не нашел решения для моей конкретной проблемы.JTree раскраска выбранного узла

Я хочу выбрать узел и выделить его в случае нажатия одной моей активированной кнопки активации и отмены подсветки, нажав кнопку деактивации.

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Motor testing"); 
    root.add(new DefaultMutableTreeNode("Option 1000 RPM")); 
    root.add(new DefaultMutableTreeNode("Option 2000 RPM")); 
    //--------------- activate button 
    JButton btnNewButton = new JButton("Activate"); 
    btnNewButton.addActionListener(new ActionListener() { 
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); 
    //.... essential rest 

    } 

Я пробовал много вещей, например, изменяя DefaultTreeCellRenderer. Но я не смог решить проблему.

Edit:

Я попытался следующие строки:

btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
       DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); 
       ((MyTreeCellRenderer) tree.getCellRenderer()).activateLeaf = true; 
     } 
    } 

и:

public class MyTreeCellRenderer extends DefaultTreeCellRenderer { 


public boolean activateLeaf = false; 

@Override 
public Component getTreeCellRendererComponent(JTree tree, Object value, 
     boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) { 
    super.getTreeCellRendererComponent(tree, value, sel, exp, leaf, row, hasFocus);  

    if(activateLeaf) 
     setForeground(Color.GREEN); 

    return this; 
} 

Но узлы повернуть только зеленый, если я изменить выбор после того, как я нажал кнопку активации. И если я сброшу флаг сразу после его установки, ничего не произойдет. Я хочу решение, которое может модифицировать определенные узлы и которое может запускать рекурсию через каждый родительский узел.

Я также хочу иметь возможность изменять несколько вариантов не только одного.

+1

* «Я пробовал много вещей, например, модификацию DefaultTreeCellRenderer». * Попробуйте опубликовать [mcve] этой попытки. * «Но я не смог решить проблему». * Почему нет? Учитывая, что мы не читатели разума, имеет смысл быть ясным и конкретным в отношении того, что пошло не так с вашей попыткой, и где вы застряли. Я мог бы проголосовать, чтобы закрыть это как «отсутствие MCVE» или «непонятное, что вы просите», но на данный момент резервирует это. –

+1

Вы говорите, что видели другие связанные записи и уже пробовали некоторые вещи по своему усмотрению. Было бы очень полезно, если бы вы могли точно указать, что вы пробовали (покажите код), и какова была ошибка или почему другие вопросы и ответы не применимы к вашей проблеме. – MikeMB

+1

@MikeMB * ".. или почему другие вопросы и ответы не относятся к вашей проблеме." * Это напоминает мне .. Это тоже, но я бы изменил ** или ** на ** и **. Итак, предоставьте 1) [mcve] 2) Информация о том, почему именно это не удалось.3) Ссылки на рассмотренные вопросы и краткий комментарий о том, почему каждый из них не смог решить этот незначительный вариант общей проблемы. –

ответ

0

Добавить tree.repaint() позвонить в компанию actionListener для кнопки.

+0

спасибо, это помогло! – Synaps

Смежные вопросы