繁体   English   中英

如何在按钮单击时将两个 jTextFields 添加到 JTable 单元格

[英]How can I add two jTextFields to JTable cell on button click

我有一个 JTable,编辑按钮和保存按钮。 当我单击编辑按钮时,我想将两个 JTextFields 插入到选定的特定单元格中。 所以我可以将(字符串)写入这些文本字段。 当我单击保存按钮时,想要从单元格中删除这两个文本字段并将该字符串粘贴(到表的同一单元格中)。

您无需将 JTextField 添加到 JTable 即可使单元格可编辑。 可以覆盖 isCellEditable(int row, int column) function 以返回 boolean 取决于编辑按钮。 这是一个例子:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.EventQueue;
import java.awt.event.*;
import java.awt.Dimension;

public class EditTableExample extends JFrame {
    private boolean editable = false;
    public EditTableExample() {
        //set up jframe
        setPreferredSize(new Dimension(500, 500));
        setMinimumSize(new Dimension(500, 500));
        setResizable(false);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        //set up content pane
        JPanel contentPane = new JPanel();
        setContentPane(contentPane);
        //table model
        Object[][] tableContents = new Object[][]{ //contents of our table
                {"Person1", "City1"},
                {"Person2", "City2"},
                {"Person3", "City3"}
        };
        Object[] tableHeader = new Object[]{
                "Name", "City"
        };
        DefaultTableModel model = new DefaultTableModel(tableContents, tableHeader) {
            @Override
            public boolean isCellEditable(int row, int column) {
                return editable;
            }
        };
        //table
        JTable table = new JTable(model);
        //scrollpane to house table
        JScrollPane tablePane = new JScrollPane(table);
        tablePane.setPreferredSize(new Dimension(450, 450));
        //button that will add a row
        JButton add = new JButton("Add Row");
        add.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                model.addRow(new Object[model.getColumnCount()]); //adds a new, empty row to the table
            }
        });
        //button that will toggle edit mode
        JButton edit = new JButton("Toggle Edit");
        edit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                editable = !editable; //switches the value of 'editable' on click
            }
        });
        //button to remove a row
        JButton remove = new JButton("Remove Row");
        remove.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                try {
                    model.removeRow(table.getSelectedRow()); //remove selected row
                }
                catch (ArrayIndexOutOfBoundsException e) {
                    JOptionPane.showMessageDialog(rootPane, "No Row Selected");
                }
            }
        });
        //add everything together
        contentPane.add(tablePane);
        contentPane.add(add);
        contentPane.add(edit);
        contentPane.add(remove);
    }
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                EditTableExample e = new EditTableExample();
                e.setVisible(true);
            }
        });
    }
}

如您所见,isCellEditable function 将返回“可编辑”的值,即 boolean,其值由“编辑”按钮切换。 不是每个人都有一个包含“姓名,城市”的单元格,而是有两列,一列用于人名,另一列用于他们的城市。 如果您还有其他问题,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM