簡體   English   中英

從JTree獲取節點值,並使用JButton在JTable中顯示它

[英]get node value from JTree and display it in JTable using JButton

我知道這是一個簡單而愚蠢的問題,因為我是新手,所以不知道如何鏈接。

我正在嘗試獲取節點值 (帶有路徑的文件),並使用JButton-“添加文件”將節點值推入JTable中,到目前為止已發布了代碼,但並未給出任何錯誤,但事實並非如此。執行我想要的內容,謝謝。

如何從一個函數到另一個函數獲取節點值,謝謝

從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設計為可與LayoutManager配合使用,不建議使用setBounds(...)setLocation(...)setXxxSize(...)方法。 請參見在容器中布置組件

另外(感謝@mKorbel的評論):

frmViperManufacturingRecord.getContentPane().add(table_2);

表應該放在JScrollPane ,就像您的樹一樣:

JScrollPane scrollPane = new JScrollPane(table_2);
frmViperManufacturingRecord.getContentPane().add(scrollPane);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM