Я видел много сообщений & вопросов, связанных с раскраской 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;
}
Но узлы повернуть только зеленый, если я изменить выбор после того, как я нажал кнопку активации. И если я сброшу флаг сразу после его установки, ничего не произойдет. Я хочу решение, которое может модифицировать определенные узлы и которое может запускать рекурсию через каждый родительский узел.
Я также хочу иметь возможность изменять несколько вариантов не только одного.
* «Я пробовал много вещей, например, модификацию DefaultTreeCellRenderer». * Попробуйте опубликовать [mcve] этой попытки. * «Но я не смог решить проблему». * Почему нет? Учитывая, что мы не читатели разума, имеет смысл быть ясным и конкретным в отношении того, что пошло не так с вашей попыткой, и где вы застряли. Я мог бы проголосовать, чтобы закрыть это как «отсутствие MCVE» или «непонятное, что вы просите», но на данный момент резервирует это. –
Вы говорите, что видели другие связанные записи и уже пробовали некоторые вещи по своему усмотрению. Было бы очень полезно, если бы вы могли точно указать, что вы пробовали (покажите код), и какова была ошибка или почему другие вопросы и ответы не применимы к вашей проблеме. – MikeMB
@MikeMB * ".. или почему другие вопросы и ответы не относятся к вашей проблеме." * Это напоминает мне .. Это тоже, но я бы изменил ** или ** на ** и **. Итак, предоставьте 1) [mcve] 2) Информация о том, почему именно это не удалось.3) Ссылки на рассмотренные вопросы и краткий комментарий о том, почему каждый из них не смог решить этот незначительный вариант общей проблемы. –