Tabelle Spaltenüberschriften vetikal, wie geht das?

martinsig

Grünschnabel
Hallo alle zusammen,

ich muss eine Tabelle implementieren bei der die Spaltenüberschriften vertikal angezeigt werden.
Gibt es da schon was von Java oder muss ich das ganze "zu Fuß" machen?
Hat vielleicht jemand eine Idee.

Vielen Dank.

Schöne Grüße
Martin
 
Hallo,

also vertikale Spaltenüberschriften sind soweit ich weiß bei SWT nicht möglich. Bei Swing und AWT wird es, denke ich mal, genauso sein. Wirst es Dir also selber zusammenbasteln müssen.

gruß klaus.
 
Moin!
Du musst einen eigenen TableCellRenderer implementieren
http://java.sun.com/javase/6/docs/api/javax/swing/table/TableCellRenderer.html

Dabei musst du dann die Methode getTableCellRendererComponent implementieren. Dort gibst du am besten ein JLabel mit der gewuenschten vertikalen Spaltenueberschrift zurueck.

Diesen eigenen TableCellRenderer weist du dann einer TableColumn als HeaderRenderer zu.. und das wars auch schon ;)

Hab leider net viel Zeit, sonst wuerd ich dir ein Beispiel posten, aber vielleicht schaffst du es ja auch so...

*gruessle*
MeinerEiner
 
Moin!
Du musst einen eigenen TableCellRenderer implementieren
http://java.sun.com/javase/6/docs/api/javax/swing/table/TableCellRenderer.html

Dabei musst du dann die Methode getTableCellRendererComponent implementieren. Dort gibst du am besten ein JLabel mit der gewuenschten vertikalen Spaltenueberschrift zurueck.

Diesen eigenen TableCellRenderer weist du dann einer TableColumn als HeaderRenderer zu.. und das wars auch schon ;)

Hab leider net viel Zeit, sonst wuerd ich dir ein Beispiel posten, aber vielleicht schaffst du es ja auch so...

*gruessle*
MeinerEiner


Hallo,
danke für die Antworten. Hat mir geholfen. Habe es mit diesem und noch einem anderen Tip hinbekommen.
Gruß
Martin
 
Eine andere Lösung wäre, die Spaltenüberschriften als HTML-Strings zu setzen. Ist vllt nicht so elegant, aber weniger aufwendig, als mit einem CellRenderer rumzuspielen.
Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

/**
 * The Class VerticalHeaderTest.
 */
public class VerticalHeaderTest extends JFrame {

    /**
     * Create a new instance of <code>VerticalHeaderTest</code>.
     */
    public VerticalHeaderTest() {
        super("VerticalHeaderTest");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        final String[] cols = new String[] {
                "<html>C<br>O<br>L<br>U<br>M<br>N<br>1</html>",
                "<html>C<br>O<br>L<br>U<br>M<br>N<br>2</html>",
                "<html>C<br>O<br>L<br>U<br>M<br>N<br>3</html>",
                "<html>C<br>O<br>L<br>U<br>M<br>N<br>4</html>",
                "<html>C<br>O<br>L<br>U<br>M<br>N<br>5</html>"};
        final Object[][] data = new Object[10][cols.length];
        for (int i = 0; i < data.length; i++) {
            final Object[] row = data[i];
            for (int j = 0; j < row.length; j++) {
                row[j] = "0" + j + "-0" + i;
            }
        }
        final JTable table = new JTable(data, cols);
        final JScrollPane scrollPane = new JScrollPane(table);

        final Container container = getContentPane();
        container.setLayout(new BorderLayout());
        container.add(scrollPane, BorderLayout.CENTER);
    }

    /**
     * The main method.
     *
     * @param args the arguments
     */
    public static void main(String[] args) {
        final JFrame frame = new VerticalHeaderTest();
        final Dimension frameSize = new Dimension(600, 400);
        frame.setSize(frameSize);
        final Dimension screenSize =
            Toolkit.getDefaultToolkit().getScreenSize();
        final int frameX = (screenSize.width - frameSize.width) / 2;
        final int frameY = (screenSize.height - frameSize.height) / 2;
        frame.setLocation(frameX, frameY);
        frame.setVisible(true);
    }
}

Grüße
Vincent
 
So hast Du aber nur die Buchstaben untereinander.
Mit einem Renderer kann das ganze Wort jedoch um 90° gedreht werden.
 
Zurück