Vertikaler JTable Header

jorgeHX

Erfahrenes Mitglied
Hallo,
ich versuche schon seit einiger Zeit den Header in meinem JTable nicht horizontal darzustellen, sondern um 90° gedreht. Leider ohne Erfolg.

Hat hier jemand vielleicht ne Idee oder nen Ansaztz?

Danke euch,
Jorge
 
Hallo!

Ich denke du solltest einfach nur schauen, dass du an die entsprechenden CellRendererComponenten kommst. Dort schaust du, dass du die paintComponent(Graphics g)- Methode überschreibst und über eine AffineTransform.getRotateInstance(Math.toDegrees(-90.0D))
an dem auf ein Graphics2D Objekt gecastestete Graphics Object die setTransform(...) Methode aufrufst. Anschließend musst du nur noch die Zeilenhöhe und die Breite der einzelnen Spalten im TableHeader neu setzen.

Gruß Tom
 
Hallo Tom,
ich habe folgendes versucht:

Code:
// This customized renderer can render objects of the type MyIcon
     class RotatedTableCellRenderer extends JLabel implements TableCellRenderer {

       protected int m_degreesRotation = -90;

       public RotatedTableCellRenderer() { };


         public Component getTableCellRendererComponent(JTable table, Object value,
             boolean isSelected, boolean hasFocus, int row, int column) {
           // Inherit the colors and font from the header component
           if (table != null) {
             JTableHeader header = table.getTableHeader();
             //header.setBounds(column*20, 0, 100, 20);
             if (header != null) {
               setForeground(header.getForeground());
               setBackground(header.getBackground());
               setFont(header.getFont());
             }
           }

           if (value instanceof MyIcon) {
             setIcon( ( (MyIcon) value).icon);
           }
           else {
             setIcon(null);
           }
           setBorder(UIManager.getBorder("TableHeader.cellBorder"));
           setHorizontalAlignment(JLabel.CENTER);

           this.setText(value.toString());
           this.repaint();
           return this;
         }

         public void paint(Graphics g) {
           Graphics2D g2 = (Graphics2D) g;
           g2.setClip(0, 0, 500, 100);
           g2.setColor(Color.BLACK);
           g2.setFont(this.getFont());
           AffineTransform at = new AffineTransform();
           at.setToTranslation(this.getWidth(), this.getHeight());
           g2.transform(at);
           double radianAngle = ( ( (double) m_degreesRotation) / ( (double) 180)) *
               Math.PI;
           at.setToRotation(radianAngle);
           g2.transform(at);
           //String text = "<html>HEADER</html>";
           g2.drawString(this.getText(), 0.0f, 0.0f);
         }

     }

Das ist der Renderer für meine Tabelle.
Aber der Header ist nur eine Zeile hoch, so dass der Name nur in den ersten zwei Buchstaben erscheint.
Hinzu kommt, dass er immer am Ende ganz rechts und nicht zentriert dargestellt wird.

Hast du da vielleich noch ne Lösung für?

Vielen Dank,
Jorge
 
Zurück