Я знаю это простые и глупые вопросы, так как я новичок не знаю, как соединить.
Я пытаюсь получить значение узла (файл с пустым) и нажать значение узла в 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);
Вот:
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);