JTable highlighting

femaledragon3490

Grünschnabel
Hallo Leute!

Ich habe da so ein kleines Problem mit meinem JTable. Ich möchte, wenn man ein Suchwort in ein JTextField eingibt, dass in jeder Zelle der JTable gesucht wird und das gefundene Suchwort markiert wird. Dabei überschreibe ich die Methode getTableCellRendererComponent, aber seht selbst:

Code:
import java.awt.BorderLayout;

public class Highlight_Table {

	public static String pattern;
	CellHighlightRenderer cr = new CellHighlightRenderer();

	public Highlight_Table(final JTextField tf, final JTable table) {
		
		
		tf.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {

				pattern = tf.getText().trim();
				table.setDefaultRenderer(Object.class,
						new CellHighlightRenderer());

			}
		});

	}

	class CellHighlightRenderer extends JTextField implements TableCellRenderer {
		public DefaultHighlighter high = new DefaultHighlighter();

		public DefaultHighlighter.DefaultHighlightPainter highlight_painter = new DefaultHighlighter.DefaultHighlightPainter(
				Color.CYAN);

		public CellHighlightRenderer() {
			setBorder(BorderFactory.createEmptyBorder());
			setHighlighter(high);
		}

		public Component getTableCellRendererComponent(JTable table,
				Object value, boolean isSelected, boolean hasFocus, int row,
				int column) {
			setFont(table.getFont());
			setValue(value);

			int pos = 0;

			if (!pattern.equals("")) {
				
				while ((pos = value.toString().indexOf(pattern, pos)) >= 0) {
					try {
						high.addHighlight(pos, pos + pattern.length(),
								highlight_painter);
						pos += pattern.length();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				
			} else {
				high.removeAllHighlights();
			}

			return this;
		}
		
		

		protected void setValue(Object value) {
			setText((value == null) ? "" : value.toString());
		}
	}
}


So, wenn ich nun das Programm starte und was in das JTextField eingebe und Enter drücke passiert nichts. Erst dann, wenn ich in der JTable erst etwas herumklicke und genau das verstehe ich nicht, wieso das JTable auf meine Maus reagiert. Wie sage ich denn, dass sofort alle gefundene Wörter markiert werden sollen? Muss ich da eine Methode überschreiben?

Ich wäre sehr erfreut darüber wenn ihr mir weiter helfen oder auf den richtigen Weg bringen könntet! :)

Ich wünsche euch allen einen schönen Tag!
 
Zurück