Добрый день! Помогите разобраться. Есть два класса: Tree и List. Необходимо, чтобы когда делаешь click по "листу" JTree этот самый "лист" в виде String уходил как новая запись в JList. Всё вроде как верно, ошибок нет, но ничего и не происходит.
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.border.TitledBorder;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class RunProg extends JFrame {
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(0,1));
frame.add(new tree());
frame.add(new list());
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
}
}
class tree extends JPanel {
final String ROOT = "Корневая запись";
final String[] nodes = new String[] {"Напитки", "Сладости"};
final String[][] leafs = new String[][]{{"Чай", "Кофе", "Коктейль",
"Сок", "Морс", "Минералка"},
{"Пирожное", "Мороженое", "Зефир", "Халва"}};
private list list;
tree(){
list = new list();
DefaultMutableTreeNode root = new DefaultMutableTreeNode(ROOT);
DefaultMutableTreeNode drink = new DefaultMutableTreeNode(nodes[0]);
DefaultMutableTreeNode sweet = new DefaultMutableTreeNode(nodes[1]);
root.add(drink);
root.add(sweet);
for ( int i = 0; i < leafs[0].length; i++)
drink.add(new DefaultMutableTreeNode(leafs[0][i], false));
for ( int i = 0; i < leafs[1].length; i++)
sweet.add(new DefaultMutableTreeNode(leafs[1][i], false));
DefaultTreeModel treeModel1 = new DefaultTreeModel(root, true);
JTree tree1 = new JTree(treeModel1);
tree1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree1.getLastSelectedPathComponent();
if (node == null) return;
String s = node.toString();
list.addlist(s);
}
});
add(new JScrollPane(tree1));
setSize(400, 300);
setVisible(true);
}
}
@SuppressWarnings("serial")
class list extends JPanel {
DefaultListModel<String> dlm = new DefaultListModel<String>();
public JList<String> list;
@SuppressWarnings({ "unchecked", "rawtypes" })
list(){
list = new JList(dlm);
dlm.addElement("Чай");
list.setPreferredSize(new Dimension(100,200));
list.setBorder(new TitledBorder("Список"));
add(new JScrollPane(list));
setVisible(true);
}
public void addlist(String str) {
dlm.addElement(str);
}
}
В Вашей программе создаются два разных объекта list
.
Один отображается в окне:
frame.add(new list());
Второй создается в дереве:
tree(){
list = new list();
Во второй список Вы добавляете элементы. Первый не изменяется совсем.
Чтобы исправить это Вам нужно либо передать дереву ссылку на список, либо создавать список в дереве и затем добавлять его в окно.
Например (первый способ):
//в методе main
list list = new list();
frame.add(new tree(list));
frame.add(list);
//в конструкторе tree
tree(list listToAdd){
list = listToAdd;
P.S. В коде значительно легче искать ошибки если соблюдаются правила именования. Осмысленные названия классов и объектов (FoodsMenuTree
, OrdersList
, selectedProducts
) упростят чтение кода на порядок.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется большой отсортированный массив строк (100000 строк, каждая строка может иметь длину в 32 символа (латинские буквы и цифры))Вводим начало...
Рассмотрим сценарий когда пользователь хочет обновить данные на двух базах , которые расположены на других узлах сетиДля этого он использует...
У меня задача организовать вывод в консоль объектов при добавлении в базу:
При старте miltithreading программы из IDE (IDEA) программа корректно работает, завершается, все потоки отрабатывают, все ресурсы закрытыНо после сборки...