ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
445
445
EMPFEHLEN
-
Hallo,
ich stehe vor folgender Problematik - ich nutze einen Zeilenumbruch im TableHeader und die Java 6 Sortierung (RowSorter). Durch das setzen eines neuen HeaderRenderers wird das SortierIcon im TableHeader nicht mehr angezeigt (siehe nachfolgendes CodeSnippet):
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
import java.awt.Component; import java.awt.Dimension; import java.util.Enumeration; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextPane; import javax.swing.UIManager; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; import javax.swing.text.MutableAttributeSet; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; public class MultiHeader { public static void main(String[] args) { new CustomFrame(); } } class CustomFrame extends JFrame { private static final long serialVersionUID = 1L; public CustomFrame() { CustomPanel customPanel = new CustomPanel(); this.setContentPane(customPanel); this.pack(); this.setTitle("JFrame"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } class CustomPanel extends JPanel { private static final long serialVersionUID = 1L; public CustomPanel() { JTable table = new JTable(); CustomTableModel model = new CustomTableModel(); table.setModel(model); table.setRowSorter(new TableRowSorter<TableModel>(model)); CustomHeaderRenderer customHeaderRenderer = new CustomHeaderRenderer(); Enumeration<TableColumn> e = table.getColumnModel().getColumns(); while (e.hasMoreElements()) { ((TableColumn) e.nextElement()).setHeaderRenderer(customHeaderRenderer); } table.setPreferredScrollableViewportSize(new Dimension(200, 70)); table.setFillsViewportHeight(true); JScrollPane scrollPane = new JScrollPane(table); this.add(scrollPane); } } class CustomHeaderRenderer extends JTextPane implements TableCellRenderer { private static final long serialVersionUID = 1L; public CustomHeaderRenderer() { setOpaque(true); setForeground(UIManager.getColor("TableHeader.foreground")); setBackground(UIManager.getColor("TableHeader.background")); setBorder(UIManager.getBorder("TableHeader.cellBorder")); StyledDocument doc = this.getStyledDocument(); MutableAttributeSet standard = new SimpleAttributeSet(); StyleConstants.setAlignment(standard, StyleConstants.ALIGN_CENTER); StyleConstants.setFontFamily(standard, "Arial"); doc.setParagraphAttributes(0, 0, standard, true); } public Component getTableCellRendererComponent(JTable jTable, Object obj, boolean isSelected, boolean hasFocus, int row, int column) { setText((String) obj); return this; } } class CustomTableModel extends DefaultTableModel { private static final long serialVersionUID = 1L; public CustomTableModel() { Object[] columnNames = {"Multi\nLine\nHeader", "\nTwo", "\nThree", "\nFour"}; Object[][] data = {{"1", "1", "1", "1"}, {"2", "2", "2", "2"}, {"3", "3", "3", "3"}, {"4", "4", "4", "4"}}; this.setDataVector(data, columnNames); } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } }
Nehm ich den "CustomHeaderRenderer" wieder raus, ist die Anzeige des SortierIcons wieder da... Weiß jemand wie man den Zeilenumbruch und das Anzeigen des Icons harmonisiert bekommt ?
Gruß
Reiner
-
Das Problem ist, dass das Zeichnen des Sortierpfeiles beim DefaultRenderer auch von der Funktion getTableCellRendererComponent übernommen wird. Da du diese Funktion aber leider überschrieben hast, wird der Pfeil nicht mehr angezeigt.
Hier aber mal der Quellcode des DefaultRenderers:
http://www.java2s.com/Open-Source/Ja...nbooleanintint
Vielleicht hilft es dir ja und du kannst die nötigen Teile in deine Implementierung reinkopieren
Ähnliche Themen
-
Renderer für TableHeader einer JTable mit mehreren Tabellenmodellen
Von Copia im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 09.09.10, 09:56 -
TableRowSorter und TableHeader
Von jal1976 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 28.11.08, 11:11 -
Linkfarbe in Tableheader
Von dadom110 im Forum CSSAntworten: 3Letzter Beitrag: 11.11.08, 11:57 -
Tableheader,Scrollpane und repaintproblem
Von cr3m4 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 10Letzter Beitrag: 15.05.08, 10:43 -
Bild in TableHeader
Von shark_no1 im Forum JavaAntworten: 1Letzter Beitrag: 12.05.05, 15:52





Zitieren
Login





