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