5
現在我有一個使用KeyReleased事件實現的搜索文本字段,當我開始從「Andrew」開始鍵入例如「An」時,找不到/更新jTable,並且在完成鍵入之後( caseSensitive)我想找的名字。實現搜索textField到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);
}
我真的需要一些幫助,請!這是我的最後一次機會,因爲我真的做了谷歌搜索解決方案,沒有任何改變。
恕我直言, 安德魯
從JTable中教程的過濾
就像一個額外的指針,最有可能的最重要的區別:'table.setRowSorter(sorter);',因爲問題中的代碼忘記了那部分。 – Yhn 2012-07-20 11:49:38
我知道這個例子,但你可以幫助我適應我的需求。現在我用IDE來構建jTable,textFields和東西。在不久的將來,我計劃手動構建。我很困惑,當我嘗試使用默認模型和東西將代碼適配到我的jTable生成的代碼時。 – 2012-07-20 12:01:24
@Apopei Andrei Ionut抱歉,我不知道如何從built_in pallete那裏做到這一點,每個動作都有屬性字段,沒有理由在我身邊爲什麼要知道Java&Swing和GUI編輯器, – mKorbel 2012-07-20 12:54:13