tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
445
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    RLott RLott ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    15
    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
     

  2. #2
    Tsunamii Tsunamii ist offline Mitglied Silber
    Registriert seit
    Jul 2009
    Beiträge
    75
    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

  1. Renderer für TableHeader einer JTable mit mehreren Tabellenmodellen
    Von Copia im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 09.09.10, 09:56
  2. TableRowSorter und TableHeader
    Von jal1976 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 28.11.08, 11:11
  3. Linkfarbe in Tableheader
    Von dadom110 im Forum CSS
    Antworten: 3
    Letzter Beitrag: 11.11.08, 11:57
  4. Tableheader,Scrollpane und repaintproblem
    Von cr3m4 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 10
    Letzter Beitrag: 15.05.08, 10:43
  5. Bild in TableHeader
    Von shark_no1 im Forum Java
    Antworten: 1
    Letzter Beitrag: 12.05.05, 15:52