java JTABLE-从数据库中删除项后刷新文本字段
我在一个框架上有文本字段和JTable。当用户单击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
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
考虑提供答案,这将减少猜测工作,并产生更好的回答“希望您理解我的问题”。希望您理解问题是什么。到目前为止,您还没有提出任何问题,您只是概述了一个要求或目标。