Filterzeile im JTableHeader

Status
Nicht offen für weitere Antworten.

Nimbus

Mitglied
Hallo,

leider habe ich trotz intensiven Suchens kein Beispielcode-Fetzchen für mein Problem gefunden. Also: ich möchte eigentlich nichts ungewöhnliches, sondern schlichtweg die Spalten-Header erweitern durch ein JTextField als Filterzeile, in der der Benutzer Filtereingaben tätigen kann und das zwischen eigentlichem Header und den Tabellendaten erscheinen soll. Soweit klappt das zumindest schonmal. Allerdings kann ich in dem Filterfeld keine Eingaben machen (auch nicht mit "setEditable(true)".

Was fehlt hier noch (mal abgesehen von Listenern und Filtermethoden, das ist schon klar)? Wie mache ich das Feld editierbar? Reicht es dann, einfach einen Listener auf das Textfeld zu setzen?

Im folgenden mal ein kurzer Beispielcode. Vielen Dank im voraus für Tipps!

Gruss,
Nimbus

Code:
// PanelHeader.java

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.*;

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;

class myRenderer extends JPanel implements TableCellRenderer {
	private static JLabel l1 = new JLabel("Eins");
	private static JTextField tf = new JTextField();
	public myRenderer() {
		setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
		l1.setAlignmentX(Component.CENTER_ALIGNMENT);
		add(l1);
		tf.setEditable(true);
		tf.setBackground(new Color(255,200,200));
		add(tf);
	}
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		// to be done		
		return this;
	}
}

public class PanelHeader extends JFrame {

	private static JFrame frame = new JFrame("PanelHeader Test 2");
	private static Container contentpane;
	private static DefaultTableModel dtm = new DefaultTableModel(5,10);
	private static JTable table = new JTable(dtm);
	private static TableColumnModel model = table.getColumnModel();
	private static JScrollPane scrollPane = new JScrollPane(table);
	private static JTableHeader jth = new JTableHeader();
	private static TableColumn tc = new TableColumn();	
	private static myRenderer newRend = new myRenderer();

	private static void changeHeader(int idx) {		
		tc = model.getColumn(idx);
		tc.setHeaderRenderer(newRend);
	}

	public static void main (String args[]) {

		contentpane = frame.getContentPane();
		contentpane.setLayout(new BorderLayout());
		contentpane.add(scrollPane,BorderLayout.CENTER);

		changeHeader(2);

		frame.setPreferredSize(new Dimension(500,300));
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);
		
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
			}
		});
	}
}
 
G

Gast

Gast
Tut mir leid, genau das hab ich heute bei google gesehen kann mich aber nicht mehr an die URL erinnern. Habe auch nach Jtable und sortieren oder filtern gegoogelt.
 
M

Michael...

Gast
Hallo,

ein Renderer ist eigentlich nur für die Darstellung einer Komponente gedacht und stellt somit keine Funktionalitäten zur Verfügung, hierzu dient dann der Editor. Allerding wüsste ich jetzt nicht, dass man einem TableHeader auch einen Editor zuweisen kann.
 

abollm

Top Contributor
Ich habe mir deinen Code nicht angesehen, aber würde es nihct reichen, einfach JText-Felder oberhalb der JTable zu platzieren und diese mit überschriebenen Methoden (z.B. columnMarginChanged) zu koppeln?

Dann hättest du aber den Nachteil, dass die JText-Felder entweder oberhalb oder unterhalb der Tabelle sind.
 

Nimbus

Mitglied
Hallo,

erstmal danke für die Antworten. BIn leider gerade krank geworden, deshalb erst jetzt die Antwort.

@Gast: in der Art war meine Suchanfrage auch, man findet zwar zig Seiten, aber irgendwie nicht das was ich suchte...naja, weiter suchen eben :-/

@Michael: danke, das könnte aber schonmal ein Hinweis sein. Ich werde mal suchen in Zusammehang mit TableCellEditors, vielleicht liegt hier der Hund begraben!

@Abollm: du hast den Grund schon genannt :) - will sagen: ja, ich wollte eben gerade nicht die Filterzeilen ausserhalb der Tabelle haben, sondern jeweils zwischen Spaltenüberschrift und Spalteninhalt.

Nimbus
 
M

Michael...

Gast
vielleicht hilft Dir ja das Beispiel weiter. Hier wird ein eigner Header erzeugt, indem JTableHeader erweitert wird.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben