Guten Tag.
Habe das Problem, wenn ich mehrere Spalten (abhängig von der zuvor sortierten Spalte) sortiere, dass immer nur auf der letzten Spalte das Pfeil-Arrow angezeigt wird.
Den Arrow-Pfeil painte ich mit folgender Klasse, die ich in diesem Forum bekommen und etwas angepasst habe.
Da die Daten aus MySQL DB mit der vom Anwender definierten Sortierung (z.B. ORDER BY datum DESC, name ASC) kommen, wollte ich die Arrow-Pfeile bei den Spalten mit obigem Code entsprechend setzen.
Gibt es dazu eine Lösung? Ist es überhaubt möglich im JTableHeader mehrere Spalten zu sortieren!
Vielen Dank.
PS:
Mehrer Spalten sortieren habe ich mit dem Comporator hingekriegt! Nur das mit dem Arrow nicht.
Habe das Problem, wenn ich mehrere Spalten (abhängig von der zuvor sortierten Spalte) sortiere, dass immer nur auf der letzten Spalte das Pfeil-Arrow angezeigt wird.
Den Arrow-Pfeil painte ich mit folgender Klasse, die ich in diesem Forum bekommen und etwas angepasst habe.
Java:
public class RTableHeaderRenderer extends DefaultTableCellRenderer implements Formate {
private static final long serialVersionUID = 1L;
public static final int NONE = 0; //NONE KEINE Sortierung
public static final int UP = 1; //DESC kleinste UNTEN (Absteigend)
public static final int DOWN = 2; //ASC kleinste OBEN (Aufsteigend)
private int sortDirection = NONE;
private String sortedColumnTitle = null;
private static int arrowSize = 8;
public RTableHeaderRenderer() {
setHorizontalAlignment(SwingConstants.CENTER);
}
public void setSortDirection(int sortDirection, String columnTitle) {
this.sortDirection = sortDirection;
this.sortedColumnTitle = columnTitle;
if(sortDirection != NONE) {
System.out.println("columnTitle = "+columnTitle);
}
// repaint();
// update(getGraphics());
}
protected void paintComponent(Graphics g) {
setOpaque(false);
setBorder(header);
setVerticalAlignment(0);
setFont(RTable.getHeadFont());
Color headerColor = RTable.getHeaderColor();
// setBackground(headerColor);
Color fC = ColorHandler.fontColor(headerColor);
setForeground(fC);
super.paintComponent(g);
if (sortedColumnTitle == null || sortedColumnTitle.isEmpty()) {
return; // No sorting specified
}
int x = getWidth() - arrowSize - 3;
int y = (getHeight() - arrowSize) / 2;
if (Objects.equals(getText(), sortedColumnTitle)) {
if (sortDirection == UP) {
Polygon arrow = new Polygon();
arrow.addPoint(x, y + arrowSize);
arrow.addPoint(x + arrowSize, y + arrowSize);
arrow.addPoint(x + arrowSize / 2, y);
g.setColor(fC);
((Graphics2D) g).fill(arrow);
}
else if (sortDirection == DOWN) {
Polygon arrow = new Polygon();
arrow.addPoint(x, y);
arrow.addPoint(x + arrowSize, y);
arrow.addPoint(x + arrowSize / 2, y + arrowSize);
g.setColor(fC);
((Graphics2D) g).fill(arrow);
}
}
}
}
Da die Daten aus MySQL DB mit der vom Anwender definierten Sortierung (z.B. ORDER BY datum DESC, name ASC) kommen, wollte ich die Arrow-Pfeile bei den Spalten mit obigem Code entsprechend setzen.
Gibt es dazu eine Lösung? Ist es überhaubt möglich im JTableHeader mehrere Spalten zu sortieren!
Vielen Dank.
PS:
Mehrer Spalten sortieren habe ich mit dem Comporator hingekriegt! Nur das mit dem Arrow nicht.
Zuletzt bearbeitet: