Hallöchen,
für eine Anwendung bastele ich eine recht komplexe Tabelle - unter Anderem mit einem 2-zelligen Header, oben die Spaltenbezeichnung, unten ein Panel, wo z.B. eine Suchmaske oder DropDownBox oder so eingebaut sind.
Die Sortierung erfolgt (momentan, nicht zwingend) mit Hilfe von TableRowSorter.
Die Panels werden in einem HeaderRenderer eingesetzt, z.B. so:
Nur reagiert der Button nicht auf den Klick.
Wie erreiche ich:
1. daß die Panels sich anklicken lassen und
2. die Sortierung nur bei dem Klick auf die oberste Headerzelle ausgelöst wird.
Hier der Code meiner ausführender Klasse:
Sollten Fragen da sein zum Klassenaufbau bzw. Code - beantworte ich sie sehr gerne - denn ich bin langsam am Verzweifeln.
Das heutige Aussehen meiner Tabelle wird angefügt. Die Inhalte sind vorerst zufällig und ohne Bedeutung.
für eine Anwendung bastele ich eine recht komplexe Tabelle - unter Anderem mit einem 2-zelligen Header, oben die Spaltenbezeichnung, unten ein Panel, wo z.B. eine Suchmaske oder DropDownBox oder so eingebaut sind.
Die Sortierung erfolgt (momentan, nicht zwingend) mit Hilfe von TableRowSorter.
Die Panels werden in einem HeaderRenderer eingesetzt, z.B. so:
Code:
public Component getTableCellRendererComponent(JTable table, Object
value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value.toString().equals("TYP")){
JPanel panel = new JPanel();
JButton b = new JButton("local");
b.addMouseListener(new MouseAdapter(){
@Override public void mouseClicked(MouseEvent e){
System.out.println("YEH");
}
});
JTextField f = new JTextField("suche");
panel.setLayout(new GridBagLayout());
panel.add(f, new GBC(0,0));
panel.add(b, new GBC(1,0));
return panel;
Nur reagiert der Button nicht auf den Klick.
Wie erreiche ich:
1. daß die Panels sich anklicken lassen und
2. die Sortierung nur bei dem Klick auf die oberste Headerzelle ausgelöst wird.
Hier der Code meiner ausführender Klasse:
Code:
package dhp.java.ues.test;
import java.awt.event.*;
import java.util.Comparator;
import javax.swing.*;
import javax.swing.table.*;
import dhp.java.ues.table.*;
public class Main {
/**
* @param args
*/
private static JTable table = new JTable();
public static void main(String[] args) {
final JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("Testapplikation dhp.java.*");
tableModel tm = new tableModel();
// Setup table
table.setColumnModel(new groupableTableColumnModel());
table.setTableHeader(new groupableTableHeader((groupableTableColumnModel)table.getColumnModel()));
table.setModel(tm);
table.getTableHeader().setDefaultRenderer(new headerRenderer());
table.setPreferredSize(tm.getTableSize());
// Setup Column Groups
groupableTableColumnModel cm = (groupableTableColumnModel)table.getColumnModel();
for (int i = 0; i < description.al.size(); i++){
columnGroup cG = new columnGroup(description.al.get(i).getName());
cG.add(cm.getColumn(i));
cm.addColumnGroup(cG);
table.getColumnModel().getColumn(i).setPreferredWidth(description.al.get(i).getBreite());
table.getColumnModel().getColumn(i).setMinWidth(20);
}
// Sort
TableRowSorter<tableModel> rowSorter = new TableRowSorter<tableModel>(tm);
for (int i = 0; i < description.al.size(); i++){
rowSorter.setComparator(i, new Comparator<Integer>(){
public int compare(Integer x, Integer y){
return x - y;
}
});
rowSorter.setSortable(i, true);
}
// rowSorter.setRowFilter(RowFilter.regexFilter("(0|2|4|6|8)$", 0));
// rowSorter.setRowFilter(RowFilter.regexFilter("1024|2", 1));
table.setRowSorter(rowSorter);
//Renderer
table.getTableHeader().setDefaultRenderer(new headerRenderer());
//Adjustable columns
table.getTableHeader().setReorderingAllowed(true);
table.getTableHeader().addMouseListener(
new MouseAdapter(){
public void mouseClicked(MouseEvent event){
int headerColumn = table.columnAtPoint(event.getPoint());
int headerRow = table.rowAtPoint(event.getPoint());
System.out.println( headerRow + "\t<- Row / Column ->\t" + headerColumn);
if (headerRow != 0){
if (headerColumn == 0){
System.out.println("LALALA");
}
}
}
});
JScrollPane s = new JScrollPane(table);
s.setPreferredSize(table.getPreferredSize());
f.add(s);
f.pack();
f.setVisible(true);
}
}
Sollten Fragen da sein zum Klassenaufbau bzw. Code - beantworte ich sie sehr gerne - denn ich bin langsam am Verzweifeln.
Das heutige Aussehen meiner Tabelle wird angefügt. Die Inhalte sind vorerst zufällig und ohne Bedeutung.
Anhänge
Zuletzt bearbeitet: