java JTABLE-从数据库中删除项后刷新文本字段

java JTABLE-从数据库中删除项后刷新文本字段,java,swing,user-interface,jtable,refresh,Java,Swing,User Interface,Jtable,Refresh,我在一个框架上有文本字段和JTable。当用户单击JTable行或上下移动键时,文本字段将填充这些选定的行值,以便用户可以更新该行。所以问题是,当我选择行,然后按下删除按钮时,表格会刷新,但文本字段仍然显示删除的行值。因此,现在我不想重置字段。我想在文本字段中显示位于已删除行之前的行值 例如,有两行 id name 1 hello 2 bello 用户选择了ID为2的行并将其删除。现在,文本字段上的值应该是hello而不是bellow您可以在JTable上使用ListSelect

我在一个框架上有文本字段和JTable。当用户单击JTable行或上下移动键时,文本字段将填充这些选定的行值,以便用户可以更新该行。所以问题是,当我选择行,然后按下删除按钮时,表格会刷新,但文本字段仍然显示删除的行值。因此,现在我不想重置字段。我想在文本字段中显示位于已删除行之前的行值

例如,有两行

id  name  
1   hello
2   bello

用户选择了ID为
2的行并将其删除。现在,文本字段上的值应该是hello而不是bellow

您可以在
JTable
上使用
ListSelectionListener
,它根据
JTable
中的当前选择设置
JTextField
元素的文本。按下删除按钮时,您可以让
ActionListener
JTable
中删除所选行,并通过强制模式中的下一个选择。下面是一个简单的例子:

import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.*;

public class JTableDelete extends JFrame {
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JTable table;
    private JTextField textField;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JTableDelete frame = new JTableDelete();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public JTableDelete() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        table = new JTable();
        table.setModel(new DefaultTableModel(new Object[][] { { "Red" }, { "Green" }, { "Blue" }, { "Violet" }, { "Orange" }, },
                new String[] { "Colors" }));

        ListSelectionModel cellSelectionModel = table.getSelectionModel();
        cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        cellSelectionModel.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                int selectedRow = table.getSelectedRow();
                int selectedColumn = table.getSelectedColumn();
                if (selectedRow != -1 && selectedColumn != -1)
                    textField.setText((String) table.getValueAt(selectedRow, selectedColumn));
                else
                    textField.setText("");
            }

        });

        contentPane.add(table, BorderLayout.CENTER);

        JButton btnDelete = new JButton("Delete");
        btnDelete.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int row = table.getSelectedRow();
                int rowCount = table.getRowCount() - 1; // -1 because counting starts at 0
                if (row != -1) {
                    ((DefaultTableModel) table.getModel()).removeRow(row);
                    rowCount--; // 1 less row now
                    if (row < table.getRowCount()) // next selection
                        table.setRowSelectionInterval(row, row);
                    else if (rowCount != -1) // end selection
                        table.setRowSelectionInterval(rowCount, rowCount);
                }
            }
        });
        contentPane.add(btnDelete, BorderLayout.SOUTH);

        textField = new JTextField();
        textField.setEnabled(false);
        contentPane.add(textField, BorderLayout.NORTH);
        textField.setColumns(10);

        pack();
    }

}

import java.awt.*;
导入java.awt.event.*;
导入javax.swing.border.*;
导入javax.swing.event.*;
导入javax.swing.table.*;
导入javax.swing.*;
公共类JTableDelete扩展了JFrame{
私有静态最终长serialVersionUID=1L;
私有JPanel内容窗格;
专用JTable表;
私有JTextField textField;
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
JTableDelete frame=新的JTableDelete();
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
公共JTableDelete(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setLayout(新的BorderLayout(0,0));
setContentPane(contentPane);
table=新的JTable();
setModel(新的DefaultTableModel(新对象[][{{“红色”},{“绿色”},{“蓝色”},{“紫色”},{“橙色”},},
新字符串[]{“颜色”});
ListSelectionModel cellSelectionModel=table.getSelectionModel();
cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
cellSelectionModel.addListSelectionListener(新建ListSelectionListener()){
public void值已更改(ListSelectionEvent e){
int selectedRow=table.getSelectedRow();
int selectedColumn=table.getSelectedColumn();
如果(selectedRow!=-1&&selectedColumn!=-1)
textField.setText((字符串)table.getValueAt(selectedRow,selectedColumn));
其他的
textField.setText(“”);
}
});
添加(表,BorderLayout.CENTER);
JButton btnDelete=新JButton(“删除”);
btnDelete.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
int row=table.getSelectedRow();
int rowCount=table.getRowCount()-1;//-1,因为计数从0开始
如果(行!=-1){
((DefaultTableModel)table.getModel()).removeRow(行);
rowCount--;//现在少了1行
if(row
考虑提供答案,这将减少猜测工作,并产生更好的回答“希望您理解我的问题”。希望您理解问题是什么。到目前为止,您还没有提出任何问题,您只是概述了一个要求或目标。