получить значение узла из JTree и отобразить его в JTable, используя JButton

1

Я знаю это простые и глупые вопросы, так как я новичок не знаю, как соединить.

Я пытаюсь получить значение узла (файл с пустым) и нажать значение узла в JTable с помощью JButton - "Добавить файлы", опубликовал код, который до сих пор пробовал, он не дает никакой ошибки, но это не выполняя то, что я хотел, пожалуйста, дайте мне указания на это, спасибо.

Как получить значение узла от одной функции до другой функции, спасибо

получение значения узла из JTree

    File root = new File(System.getProperty("user.home"));
    FileTreeModel model = new FileTreeModel(root);
    JTree tree = new JTree(model);
    JScrollPane scrollpane = new JScrollPane(tree);
    scrollpane.setBounds(10, 9, 304, 730);
    frmViperManufacturingRecord.getContentPane().add(scrollpane);


    tree.addTreeSelectionListener(new TreeSelectionListener() {
        public void valueChanged(TreeSelectionEvent e) {
            File node = (File)e.getPath().getLastPathComponent();
            //System.out.println("You selected " + node);
            if (!node.isFile()) {
                JFrame frame = new JFrame();
                JOptionPane.showConfirmDialog(frame, "Please select the valid file to Add Files", "Not Valid File",JOptionPane.PLAIN_MESSAGE );
                //if (result == JOptionPane.CANCEL_OPTION);
            }
            //else
        }
    });

попробуйте нажать значение узла в JTable

    //table just below Add Files button
    table_2 = new JTable();
    table_2.setBounds(324, 43, 713, 121);
    frmViperManufacturingRecord.getContentPane().add(table_2);

используя JButton

    // Add files button
    JButton btnAddFiles_1 = new JButton("Add Files");
    btnAddFiles_1.setMnemonic('A');
    btnAddFiles_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            Object rowData[][] = { { "01.", node, }};
            Object columnNames[] = { "Sl.no", "File name"};
            JTable table = new JTable(rowData, columnNames);
        }
    });
    btnAddFiles_1.setFont(new Font("Calibri", Font.BOLD, 12));
    btnAddFiles_1.setBounds(324, 9, 89, 23);
    frmViperManufacturingRecord.getContentPane().add(btnAddFiles_1);
Теги:
swing
jbutton
jtable
jtree

1 ответ

2
Лучший ответ

Вот:

btnAddFiles_1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        Object rowData[][] = { { "01.", node, }};
        Object columnNames[] = { "Sl.no", "File name"};
        JTable table = new JTable(rowData, columnNames); // new JTable that is not placed in the content pane
   }
});

Не заново создайте таблицу, поскольку table_2 уже был создан и размещен. Обновите свою модель таблицы. Например:

btnAddFiles_1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        Object rowData[][] = { { "01.", node, }};
        Object columnNames[] = { "Sl.no", "File name"};
        table_2.setModel(new DefaultTableModel(rowData, columnNames));
   }
});

Боковые заметки

Об этой строке:

table_2.setBounds(324, 43, 713, 121);

Swing предназначен для работы с LayoutManagers и такими методами, как setBounds(...), setLocation(...) и setXxxSize(...) не рекомендуется. См. Раздел " Укладка компонентов внутри контейнера"

Кроме того (благодаря комментариям @mKorbel):

frmViperManufacturingRecord.getContentPane().add(table_2);

Таблицы должны быть помещены в JScrollPane же, как ваше дерево:

JScrollPane scrollPane = new JScrollPane(table_2);
frmViperManufacturingRecord.getContentPane().add(scrollPane);
  • 2
    JTable тоже должен быть в JScorllPane -1 (плюс не доступно в комментариях, здесь не разрешено)
  • 0
    Я тоже это заметил. Но вы можете использовать 1+ (любопытная вещь, хотя) @mKorbel
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню