Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

JTable filter insensitive case

136 views
Skip to first unread message

Biagio

unread,
Dec 26, 2009, 4:19:42 AM12/26/09
to
Hi o all,

in this sample I don't know how filtering this rows to include upper
and lower case records. If I use the string "micro" the JTable don't
shows the rows:

{"MSFT", "Microsoft", 26.56},
{"SUNW", "Sun Microsystems", 3.86},
{"LIMI", "Linemicro!", 67.69}

but only

{"LIMI", "Linemicro!", 67.69}

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

public class FilterTable {

public static void main(String args[]) {
Runnable runner = new Runnable() {

public void run() {
JFrame frame = new JFrame("Ordenando JTable");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rows[][] = {
{"AMZN", "Amazon", 41.28},
{"EBAY", "eBay", 41.57},
{"GOOG", "Google", 388.33},
{"MSFT", "Microsoft", 26.56},
{"NOK", "Nokia Corp", 17.13},
{"ORCL", "Oracle Corp.", 12.52},
{"SUNW", "Sun Microsystems", 3.86},
{"TWX", "Time Warner", 17.66},
{"VOD", "Vodafone Group", 26.02},
{"YHOO", "Yahoo!", 37.69},
{"LIMI", "Linemicro!", 67.69}
};
Object columns[] = {"Sigra", "Nome", "Preco"};
TableModel model =
new DefaultTableModel(rows, columns) {

public Class getColumnClass(int column) {
Class returnValue;
if ((column >= 0) && (column <
getColumnCount())) {
returnValue = getValueAt(0,
column).getClass();
} else {
returnValue = Object.class;
}
return returnValue;
}
};
JTable table = new JTable(model);
final TableRowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(table);
frame.add(pane, BorderLayout.CENTER);
JPanel panel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Filtro");
panel.add(label, BorderLayout.WEST);
final JTextField filterText =
new JTextField("micro");
panel.add(filterText, BorderLayout.CENTER);
frame.add(panel, BorderLayout.NORTH);
JButton button = new JButton("Filtro");
button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
String text = filterText.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
try {
sorter.setRowFilter(
RowFilter.regexFilter(text));
} catch (PatternSyntaxException pse) {
System.err.println("Erro");
}
}
}
});
frame.add(button, BorderLayout.SOUTH);
frame.setSize(300, 250);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}

}

Any idea?

Thanks and sorry for my english

Biagio

Steven Simpson

unread,
Dec 26, 2009, 5:10:20 AM12/26/09
to
Please do not multipost. F'up set to *.gui.

On 26/12/09 09:18, Biagio wrote:
> in this sample I don't know how filtering this rows to include upper
> and lower case records.

> sorter.setRowFilter(RowFilter.regexFilter(text));
>

I found the docs for that call:

<http://java.sun.com/javase/6/docs/api/javax/swing/RowFilter.html#regexFilter%28java.lang.String,%20int...%29>

It uses Pattern, which can take a number of flags, including:

<http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html#CASE_INSENSITIVE>

These are normally specified when compiling the pattern, but that stage
seems to be out of your hands. Fortunately, it looks like you can
change the flags inside the expression, e.g. with (?i):

<http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html#special>

(The 'u' flag might be a good thing too.)

You could try just prefixing the field's text with this string:

sorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));

--
ss at comp dot lancs dot ac dot uk

0 new messages