automatische Anzahl der Spalten ermitteln -> geht nicht

Hein_nieH

Bekanntes Mitglied
Hallo,
ich habe eine JTabel erstellt, bei der nach klicken auf einen Spaltenkopf, das Erscheinungsbild des Spaltenkopfes sich ändern soll.
Hierzu benutze ich zwei Renderer, einen Renderer für das Standarderscheinungsbild und ein Renderer für das Erscheinungsbld nach Selektion einer Spalte.
Die hierzu erstellte Klasse funktioniert auch soweit.
Nur ein Problem besteht, was für mich nicht verständlich ist:
Im Kontruktor wird eine Referenz der Tabelle übergeben.
Wenn ich aus der Referenzvariable die Anzahl der Spalten ermitteln will erhalte ich als Anzahl "0".
Als Ersatzlösung habe ich die Anzahl der Spalten fest (hier columnCount=9) definiert.
Hat jemand eine Idee, warum die automatische Spaltenanzahl mit 0 quittiert wird?


Java:
    class TableHeaderMouseListener__1 extends MouseAdapter
    {
        //Der selekte Tabellenkopf ist während der selektion farbig darzustellen
        private JTable table;
        private int columnCount;
        private Boolean [] arrColumnSelected;
              
        public TableHeaderMouseListener__1(JTable table)
        {
            this.table = table;
            //columnCount=this.table.getColumnModel().getColumnCount();//FIXME liefert 0
            columnCount=9; //Ersatzloesung __________
            arrColumnSelected = new Boolean[columnCount];
            for (int i=0; i<columnCount; i++)
            {
                arrColumnSelected[i]=false;
            }
        }//Konstruktor
      
        public void mouseClicked(MouseEvent event)
        {
            Point point = event.getPoint();
            int column = table.columnAtPoint(point);
            //JOptionPane.showMessageDialog(table, "Column count -> " + columnCount);            //debug
            //JOptionPane.showMessageDialog(table, "Column header #" + column + " -> " + str);    //debug
            this.arrColumnSelected[column] = !this.arrColumnSelected[column];
          
            TableColumn tblcol=table.getColumnModel().getColumn(column);
            if ( this.arrColumnSelected[column]==true )
                tblcol.setHeaderRenderer( new MyTableCellRendererHeadSelected() );
            else
                tblcol.setHeaderRenderer( new MyTableCellRendererHead() );
        }//mouseClick
    }//TableHeaderMouseListener__1

Der Aufruf des Listernes erfolgt so:
Java:
table.getTableHeader().addMouseListener(new TableHeaderMouseListener__1(table));

Über eine Antwort würde ich mich freuen.

Gruss Hein_nieH
 
Moinsen.

auch table,getColumnCount() liefert 0.
irgend wie unlogisch aber ich muss mich wohl damit abfinden :-(
Meine Absicht war es diesen Listener universell einzusetzen, ohne manuell (Hilfslösung) die Spaltenanzahl angeben zu müssen.

Gruss Hein_neiH
 
Moinsen,

hier ein Codeausschnitt ...
Java:
public ShowGUI()
    {
        String pathTest = System.getProperty("user.dir") + "\\DVD_Archiv.xml";
        File myFile = new File(pathTest);
        if ( myFile.exists() )
        {
            this.standardFilePath = pathTest;
        }
            //getJarPath
       
        action = new ActionGUI(frame,standardFilePath);
       
        //Panel Centre -> Darszellung Tabelle
        JPanel panelCentre=new JPanel();
        panelCentre.setLayout(new GridLayout(1,1)); //Grid Layout passt Groesse der enthaltenene Objekte IMMER an
       
        //Panel South -> Statusleiste / Statusinformationen
        JButton buttonOK=new JButton("Show XML");
        buttonOK.addActionListener(new ButtonListenerDateiOpen());
        labelPath.setText("");
        labelPath.setBackground(new Color(225,225,110));
       
        JPanel panelSouth=new JPanel();
        panelSouth.setLayout(new FlowLayout(FlowLayout.RIGHT,20,10));//hgap, vgap
        panelSouth.add(labelPath);
        panelSouth.add(buttonOK);
           
        //Tabelle definieren
        table.setModel(myTableModel);
        table.setColumnModel(myTableColumnModel);
        table.setDefaultRenderer(Object.class, new MyTableCellRenderer());
        table.getTableHeader().setDefaultRenderer(new MyTableCellRendererHead());
        table.getTableHeader().addMouseListener(new TableHeaderMouseListener__1(table));///////
        table.setShowHorizontalLines(false);
        table.setGridColor(Color.LIGHT_GRAY);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

Die entscheidende Zeile dürfte sein:
table.getTableHeader().addMouseListener(new TableHeaderMouseListener__1(table));///////

Vielleicht gibt es ja doch noch eine Lösung 🙂


Gruss Hein_nieH
 

Neue Themen


Zurück
Oben