sintaxis setvalueat setrowsorter setmodel libreria java swing sorting jtable tablerowsorter

setvalueat - setrowsorter java



JTable Sorting not Displaying Images (1)

Así que he implementado con éxito una función de búsqueda en mi pequeño programa, pero cuando hago clic en el botón para ordenar, funciona bien, pero las imágenes no se muestran. Este es el código que agregué para el clasificador que funciona bien, pero las imágenes de cada fila no aparecen. Cuando saco este código, aparecen las imágenes pero la clasificación no funciona. ¿Hay alguna posibilidad de que pueda hacer que las imágenes se muestren al ordenar?

// Sorter Code. Images show up when this code gets taken out. table = new JTable(model); final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); table.setRowSorter(sorter); search_button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String text = search.getText(); if (text.length() == 0) { sorter.setRowFilter(null); } else { sorter.setRowFilter(RowFilter.regexFilter(text)); } } }); // sorter code ends here.


  • tiene que sincronizar la vista de JTable con su modelo,

  • tener en cuenta los métodos convertXxxIndexToXxx

  • add int modelRow = convertRowIndexToModel(row); a su Renderer o prepareRenderer

  • ejemplo convertRowIndexToModel

EDITAR

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.util.regex.PatternSyntaxException; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.table.*; public class TableIcon extends JFrame implements Runnable { private static final long serialVersionUID = 1L; private JTable table; private JLabel myLabel = new JLabel("waiting"); private int pHeight = 40; private boolean runProcess = true; private int count = 0; private JTextField filterText = new JTextField(15); public TableIcon() { ImageIcon errorIcon = (ImageIcon) UIManager.getIcon("OptionPane.errorIcon"); ImageIcon infoIcon = (ImageIcon) UIManager.getIcon("OptionPane.informationIcon"); ImageIcon warnIcon = (ImageIcon) UIManager.getIcon("OptionPane.warningIcon"); String[] columnNames = {"Picture", "Description"}; Object[][] data = {{errorIcon, "About"}, {infoIcon, "Add"}, {warnIcon, "Copy"},}; DefaultTableModel model = new DefaultTableModel(data, columnNames) { private static final long serialVersionUID = 1L; // Returning the Class of each column will allow different // renderers to be used based on Class @Override public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; table = new JTable(model); table.setRowHeight(pHeight); table.setPreferredScrollableViewportSize(table.getPreferredSize()); final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); table.setRowSorter(sorter); filterText.setMaximumSize(new Dimension(400, 30)); filterText.setFont(new Font("Serif", Font.BOLD, 20)); filterText.setForeground(Color.BLUE); filterText.getDocument().addDocumentListener(new DocumentListener() { private void searchFieldChangedUpdate(DocumentEvent evt) { String text = filterText.getText(); if (text.length() == 0) { sorter.setRowFilter(null); table.clearSelection(); } else { try { sorter.setRowFilter(RowFilter.regexFilter("(?i)" + text)); } 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); } }); add(filterText, BorderLayout.NORTH); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane, BorderLayout.CENTER); myLabel.setPreferredSize(new Dimension(200, pHeight)); myLabel.setHorizontalAlignment(SwingConstants.CENTER); add(myLabel, BorderLayout.SOUTH); new Thread(this).start(); } public void run() { while (runProcess) { try { Thread.sleep(1250); } catch (Exception e) { e.printStackTrace(); } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ImageIcon myIcon = (ImageIcon) table.getModel().getValueAt(count, 0); String lbl = "JTable Row at : " + count; myLabel.setIcon(myIcon); myLabel.setText(lbl); count++; if (count > 2) { count = 0; } } }); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TableIcon frame = new TableIcon(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setLocation(150, 150); frame.pack(); frame.setVisible(true); } }); } }