Flexi: Textausrichtung für eine Spalte einer JTabel

Grüße, hier ich mal wieder.

Ich habe folgendes Problem, was mir schon den ganzen Abend den Nerv raubt.

Ich möchte eine Spalte in meiner JTable rechtsbündig ausrichten, den Rest aber nicht.

Wie kann ich das Alignment für Spalten festlegen??

Ich hab schon versucht dies über den DefaultCellRenderer zu machen, aber ohne Erfolg. Ebenso erfolg los war der Versuch, die Spalte direkt anzusprechen. Hab folgende Systax verwendet.

JTable tab = new JTable(...); // Tabelle mit 6 Spalten
tab.getColumnModel().getColumn(1)... ;

Aber das gibt es sowas wie setAlignmentX oder setVerticalAlignment gibt es da nich.

Ich habe absolute keine Idee mehr, wo ich noch nachschauen könnt. Hab auch schon im Netz recherchiert, hat aber auch nichts gebracht.

Ich hoffe, ich kann mal wieder auf euch zählen und hoffe auf schnelle Antwort.

Danke Mädels & Jungs!

  1. Hej,

    Ich möchte eine Spalte in meiner JTable rechtsbündig ausrichten, den Rest aber nicht.

    Zunächst, Swing is bisher nich wirklich meine Stärke gewesen, ich mach Dir trotzdem einen (ungetesteten) Vorschlag:

    Ich hab schon versucht dies über den DefaultCellRenderer zu machen, aber ohne Erfolg.

    Hmm, hier wäre schon ganz interessant gewesen, was du versucht hast.

    (([link:http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JLabel.html@title=JLable])([link:http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTable.html#getColumnModel()@title=tab.getColumnModel()].[link:http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/TableColumnModel.html#getColumn(int)@title=getColumn(1)].[link:http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/TableColumn.html#getCellRenderer()@title=getCellRenderer()])).[link:http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JLabel.html#setHorizontalAlignment(int)@title=setHorizontalAlignment(int alignment)];

    Laut Api müsste das das sein, was du möchtest, klappt aber nur, wenn dein TableCellRenderer vom Typ DefaultTableCellRenderer ist, weil der wiederum JLable erweitert.

    Ich habe absolute keine Idee mehr, wo ich noch nachschauen könnt. Hab auch schon im Netz recherchiert, hat aber auch nichts gebracht.

    Das ganze Netz is schon zu viel, meine ersten beiden Anlaufstellen sind
    Java ist auch eine Insel 4 und die API natürlich.

    Beste Grüße
    Biesterfeld

    --
    "Nein! ... Nein, schneller, leichter, verführerischer die dunkle Seite ist."
    1. Hmm, also irgendwie kappier ich das nich.

      Diese Syntax hab ich auch schon gefunden gehabt, aber es funktioniert nich.

      Kann mir vielleicht jemand ein Code-Beispiel für folgende Tabelle, bzw. die zweite Spalte geben?

      Colheads = new String[2];
      Colheads[0] = "Bezeichung";
      Colheads[1] = "Wert";

      Data = new String[3][2];
      Data[0][0] = " Name:";       Data[0][1] = " Flexi";
      Data[1][0] = " Geburtstag:"; Data[1][1] = " 30.10.1990";
      Data[2][0] = " Alter:";      Data[2][1] = " 14";

      JTable tab = new JTable(Data, Colheads);

      Und nun will ich, dass die zweite Spalte rechtsbündig und die erste linksbündig ist. Wie stelle ich das an?
      Über ein DefaultCellRenderer?
      Oder über die getColumnModel().getColumn(1)... ?
      Ich kann auch nich richtig nachvoll ziehen, was das mit JLabel zu tun hat.

      Entschuldigung, wenn ich mich es doof anstelle, aber ich halt noch nicht verstanden.

      Danke für Eure Hilfe.

      1. Hallo!

        Und nun will ich, dass die zweite Spalte rechtsbündig und die erste linksbündig ist. Wie stelle ich das an?
        Über ein DefaultCellRenderer?

        Warum schreibst Du Dir nicht Deinen eigenen Renderer? Das ist gar nicht schwer und gibt Dir die volle Kontrolle über das Aussehen der einzelnen Zellen. Die einzige Methode, die Du implementieren mußt, ist getTableCellRendererComponent(...). Dort kreierst Du ein JLabel, passt es Deinen Vorstellungen an (z.B. die horizontale Ausrichtung), und gibst es anschließend zurück.

        Ich habe unten mal ein Beispiel gepostet, wie so etwas ausschauen könnte (ist nur Copy&Paste und müßte für Deine Tabelle natürlich angepasst werden).

          
        public class CustomTableCellRenderer implements TableCellRenderer {  
          
           private Font font = new Font("SansSerif", Font.BOLD, 12);  
          
           public Component getTableCellRendererComponent(  
              JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {  
          
              JLabel label;  
              if(!(value instanceof JLabel)) {  
                 label = new JLabel((String)value);  
              } else {  
                 label = (JLabel) value;  
              }  
              label.setOpaque(true);  
              label.setFont(table.getFont());  
              label.setForeground(table.getForeground());  
              label.setBackground(table.getBackground());  
          
              if(isSelected) {  
                 label.setBackground(table.getSelectionBackground());  
                 label.setForeground(table.getSelectionForeground());  
              }  
          
              if(column == 1) {  
                 label.setHorizontalAlignment(JLabel.RIGHT);  
              }  
          
              if(column == 3) {  
                 label.setHorizontalAlignment(JLabel.CENTER);  
              }  
          
              return label;  
           }  
        }  
        
        

        Ich kann auch nich richtig nachvoll ziehen, was das mit JLabel zu tun hat.

        Nun schon, oder?

        Gruß,
        Oliver

        --
        Nichts ist wertvoller als ein guter Freund, ausser ein Freund mit Schokolade.