gpt4 book ai didi

java - 将搜索文本字段实现到 jTable 中

转载 作者:搜寻专家 更新时间:2023-10-31 20:04:42 25 4
gpt4 key购买 nike

现在我有一个使用 KeyReleased 事件实现的搜索 textField,当我开始输入例如“Andrew”中的“An”时,它不会找到/更新 jTable,并且在我完成准确输入(区分大小写)名称后我要找。

所以,我想要的是从这个 site 实现过滤方法但我有大问题。在执行以下操作并删除“旧的”KeyReleased 事件后,当我在文本字段“txt_search”中键入内容时,jTable 没有任何反应。

我的 IDE (NetBeans) 生成的表格代码是(从自定义代码面板复制):

Table_Employee = new javax.swing.JTable();

Table_Employee.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
)
);

Table_Employee.setToolTipText("Employee info table");

Table_Employee.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

Table_Employee.getTableHeader().setReorderingAllowed(false);

Table_Employee.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
Table_EmployeeMouseClicked(evt);
}
});
Table_Employee.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
Table_EmployeeKeyPressed(evt);
}
});

jScrollPane1.setViewportView(Table_Employee);

我在我的面板类中添加了这个,其中表格是:

import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;
import net.proteanit.sql.DbUtils;
import java.awt.event.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.*;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;


public class Employee_info extends javax.swing.JFrame {
Connection conn=null;
ResultSet rs=null;
PreparedStatement pst=null;
private TableRowSorter<DefaultTableModel> sorter;
/**
* Creates new form Employee_info
*/
public Employee_info() {
initComponents();
conn=javaconnect.ConnecrDb();
Update_table();
Fillcombo();
currentDate();
Table_Employee.setAutoCreateRowSorter(true);
Table_Employee.setFillsViewportHeight(true);
Table_Employee.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);


DefaultTableModel model = new DefaultTableModel();
sorter = new TableRowSorter<DefaultTableModel>(model);
Table_Employee = new JTable(model);


txt_search = new JTextField();
//Whenever filterText changes, invoke newFilter.
txt_search.getDocument().addDocumentListener(
new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
newFilter();
}
public void insertUpdate(DocumentEvent e) {
newFilter();
}
public void removeUpdate(DocumentEvent e) {
newFilter();
}
});
}

private void newFilter() {
RowFilter<DefaultTableModel, Object> rf = null;
//If current expression doesn't parse, don't update.
try {
rf = RowFilter.regexFilter(txt_search.getText(), 0);
} catch (java.util.regex.PatternSyntaxException e) {
return;
}
sorter.setRowFilter(rf);
}

我真的需要一些帮助,拜托了!这是我最后的机会,因为我真的做了 google 搜索解决方案,而且没有任何改变。

恕我直言,安德鲁

最佳答案

  • JTable 教程中有关筛选和排序的小修改代码

  • 对于 JCheckBox 的过滤,您可以输入“true”/“false”

代码

import java.awt.*;
import java.util.regex.PatternSyntaxException;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class TableFilterSorter extends JPanel {

private boolean DEBUG = false;
private static final long serialVersionUID = 1L;

public TableFilterSorter() {
super(new BorderLayout(5, 5));
final JTextField filterCpText = new JTextField();
filterCpText.setFont(new Font("Serif", Font.BOLD, 28));
filterCpText.setForeground(Color.BLUE);
filterCpText.setBackground(Color.LIGHT_GRAY);
JPanel filterCpPanel = new JPanel();
filterCpPanel.setLayout(new BorderLayout(5, 5));
filterCpPanel.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
filterCpPanel.setBackground(Color.LIGHT_GRAY);
filterCpPanel.setPreferredSize(new Dimension(300, 30));
filterCpPanel.add(filterCpText, BorderLayout.CENTER);
add(filterCpPanel, BorderLayout.NORTH);
final JTable table = new JTable(new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(500, 160));
table.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane, BorderLayout.CENTER);
TableModel myTableModel = table.getModel();
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(myTableModel);
table.setRowSorter(sorter);
filterCpText.getDocument().addDocumentListener(new DocumentListener() {

private void searchFieldChangedUpdate(DocumentEvent evt) {
String text = filterCpText.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
table.clearSelection();
} else {
try {
sorter.setRowFilter(RowFilter.regexFilter("(?i)" + text, 4));
table.clearSelection();
} catch (PatternSyntaxException pse) {
JOptionPane.showMessageDialog(null, "Bad regex pattern",
"Bad regex pattern", JOptionPane.ERROR_MESSAGE);
}
}
}

@Override
public void insertUpdate(DocumentEvent evt) {
searchFieldChangedUpdate(evt);
}

@Override
public void removeUpdate(DocumentEvent evt) {
searchFieldChangedUpdate(evt);
}

@Override
public void changedUpdate(DocumentEvent evt) {
searchFieldChangedUpdate(evt);
}
});
}

private class MyTableModel extends AbstractTableModel {

private static final long serialVersionUID = 1L;
private String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};
private Object[][] data = {
{"Mary", "Campione", "Snowboarding", new Integer(5), false},
{"Alison", "Huml", "Rowing", new Integer(3), true},
{"Kathy", "Walrath", "Knitting", new Integer(2), false},
{"Sharon", "Zakhour", "Speed reading", new Integer(20), true},
{"Philip", "Milne", "Pool", new Integer(10), false},
{"Mary", "Campione", "Snowboarding", new Integer(5), false},
{"Alison", "Huml", "Rowing", new Integer(3), true},
{"Kathy", "Walrath", "Knitting", new Integer(2), false},
{"Sharon", "Zakhour", "Speed reading", new Integer(20), true},
{"Philip", "Milne", "Pool", new Integer(10), false},};

@Override
public int getColumnCount() {
return columnNames.length;
}

@Override
public int getRowCount() {
return data.length;
}

@Override
public String getColumnName(int col) {
return columnNames[col];
}

@Override
public Object getValueAt(int row, int col) {
return data[row][col];
}

@Override
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

@Override
public boolean isCellEditable(int row, int col) {
if (col < 2) {
return false;
} else {
return true;
}
}

@Override
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value + " (an instance of " + value.getClass() + ")");
}
data[row][col] = value;
fireTableCellUpdated(row, col);
if (DEBUG) {
System.out.println("New value of data:");
printDebugData();
}
}

private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();
for (int i = 0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j = 0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
}

private static void createAndShowGUI() {
JFrame frame = new JFrame("TableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableFilterSorter newContentPane = new TableFilterSorter();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.setLocation(150, 150);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
createAndShowGUI();
}
});
}
}

关于java - 将搜索文本字段实现到 jTable 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com