2012-07-20 11 views
5

Şimdi bir arama metnim var. KeyReleased olayıyla birlikte uygulanan, jTable'ı bulamamış/güncellemediğimde (örneğin, "Andrew" dan "An" yazarken) ve tam olarak yazmak için bitirdikten sonra (caseSensitive) bulmak istediğim ad.Arama metnini gerçekleştirme jTable ile işaretleyin

Yani, istediğim, bu site filtreleme yöntemini uygulamaktır ancak büyük sorunlarım var. Uygulamanın altında ve "eski" KeyRedeased olayının kaldırılmasından sonra, "txt_search" metin alanında bir şey yazdığımda jTable ile hiçbir şey olmuyor.

IDE (NetBeans) tarafından oluşturulan tablonun Benim kodu (özelleştirme kod panelinden aktarılmıştır):

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); 

ve tablo nerede benim paneli sınıfına bu ekledi:

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); 
} 

ben Gerçekten biraz yardıma ihtiyacım var, lütfen! Bu benim son şansım, çünkü google arama çözümlerini gerçekten yaptım ve hiçbir şey değişmedi. ilgili olarak

, Andrew

cevap

5
  • küçük modiefied filtreleme hakkında JTable öğreticisindeki kodu ve "gerçek"

/"yanlış" koymak yapabilirsiniz JCheckBox için filtreleme için

  • sıralama

    kod

    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(); 
          } 
         }); 
        } 
    } 
    
  • +0

    Büyük olasılıkla en önemli farkın ek bir işaretçisi olduğu gibi: 'table.setRowSorter (sıralayıcı); ', sorulan kodun o bölümü unuttuğu için. – Yhn

    +0

    Bu örneği biliyorum, ancak ihtiyaçlarıma uyum sağlamanıza yardımcı olabilirsiniz. Şimdilik jTable, textFields ve malzeme oluşturmak için IDE kullanıyorum. Yakın gelecekte manuel olarak inşa etmeyi planlıyorum. Bu kodu, varsayılan model ve malzeme ile jTable tarafından oluşturulan koduma uyarlamaya çalıştığımda kafam karıştı. –

    +0

    @Apopei Andrei Ionut üzgünüm built_in pallete'den nasıl yapılacağını bilmiyorum, her eylem için özellik alanları var, neden benim için neden Java & Swing'i bilmem ve GUI Editor ile birlikte, – mKorbel