tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
721
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Tsunamii Tsunamii ist offline Mitglied Silber
    Registriert seit
    Jul 2009
    Beiträge
    75
    So jetz meld ich mich auch mal als Autor zu Wort

    Hier ist meine momentane Situation:
    Ich lass meine Panels dynamisch aus XML Dateien aufbauen, was bisher auch wunderbar funktioniert hat, nur wollte ich jetzt die Möglich hinzufügen, dass man JTables benutzen kann, die in einer JScrollPane liegen.

    Momentan wird die JTable so eingebaut:
    -> erzeugen des JPanels
    -> setzen der Attribute
    ->-> erzeugen der JScrollPane
    ->-> setzen der Attribute
    ->-> hinzufügen der JScrollPane an das Panel
    ->->-> erzeugen der JTable
    ->->-> setzen der Attribute
    ->->-> hinzufügen der JTable an die Pane

    Desweiteren soll die JTable leer erzeugt werden und nur die Header anzeigen, da die Table erst gefüllt wird, wenn der Benutzer auf Suchen klickt.

    Mein eigentliches Problem ist nun folgendes:
    - die Header Leiste wird gar nicht erst angezeigt
    - die ScrollBar wird zwar angezeigt, wird aber übermalt sobald Einträge in die Table kommen
    - scrollen ist gar nicht erst möglich


    Hab mal versucht den Aufbau nicht dynamisch nachzubauen:
    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
    
    import java.awt.Dimension;
     
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
     
    public class TableTest {
        
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            
            JScrollPane pane = new JScrollPane();
            
            pane.setPreferredSize(new Dimension(300,300));
            pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            
            JTable table = new JTable();
            for(int i=0; i<100; i++) {
                addEmptyRow(table);
            }
            
            table.setSize(300, 300);
            table.setPreferredSize(table.getSize());
            table.setVisible(true);
            
            pane.add(table);
            frame.getContentPane().add(pane);
            
            System.out.println(table.getRowCount());
            
            frame.setSize(500,500);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            frame.setLocationRelativeTo(null);
        }
        
     
        public static void addEmptyRow(JTable pTable) {
            DefaultTableModel tModel = (DefaultTableModel) pTable.getModel();
            tModel.addRow((Object[]) null);
            tModel.fireTableStructureChanged();
        }
     
    }

    Ich hoffe wirklich dass mir hier jemand helfen kann. Ich sitz hier schon einige Stunden dran und es ist keine Lösung in sicht.
     

  2. #2
    Der Wolf Der Wolf ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    153
    Hi,

    hier, so geht es bei mir.

    Code java:
    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
    
    import java.awt.Dimension;
     
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
     
    public class TableTest {
     
        public static void main(String[] args) {
            JFrame frame = new JFrame(); 
     
            DefaultTableModel model = new DefaultTableModel();
            model.setColumnIdentifiers(new String[]{"Test1", "Test2", "Test3"});
            
            JTable table = new JTable(model);
            for(int i=0; i<100; i++) {
                addEmptyRow(table);
            }
            
            table.setSize(300, 300);
            table.setPreferredSize(table.getSize());
            table.setVisible(true);
     
            JScrollPane pane = new JScrollPane(table);
            pane.setPreferredSize(new Dimension(300,300));
            pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);     
            frame.getContentPane().add(pane);
     
            System.out.println(table.getRowCount());
     
            frame.setSize(500,500);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            frame.setLocationRelativeTo(null);
        }
     
     
        public static void addEmptyRow(JTable pTable) {
            DefaultTableModel tModel = (DefaultTableModel) pTable.getModel();
            tModel.addRow(new String[]{"1", "2", "3"});        
        }
     
    }

    Ansonsten kannst du auch, statt die Table im Constructor des ScrollPanes zu übergeben, sie mit
    Code java:
    1
    
    pane.setViewportView(table)
    hinzufügen

    Gruß
    Der Wolf
    Geändert von Der Wolf (17.08.10 um 15:11 Uhr)
     

  3. #3
    Tsunamii Tsunamii ist offline Mitglied Silber
    Registriert seit
    Jul 2009
    Beiträge
    75
    Vielen Dank für die Antwort, habe aber eine andere Lösung gefunden.
    Und zwar habe ich mir eine eigene Klasse geschrieben die von JScrollPane erbt und bereits eine eigene Table beinhaltet. Dies hat den Hintergrund, dass ich jetz beim Erzeugen einer Table nicht mehr 2 sondern nur 1 Klasse per Hand erzeugen muss.

    Hier mal der Code für die dies interessiert (Kann nützlich sein, da eine Table ja im Normalfall eh immer einen Scrollbalken hat):
    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
    
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;
     
    import de.***.********.application.gui.jxl.JXLUtils;
     
    public class ScrollTable extends JScrollPane {
     
        private static final long serialVersionUID = 1L;
        private static final ThisTable table = new ThisTable();
     
        public ScrollTable() {
            super(table);
            table.setVisible(true);
        }
     
        public void addColumn(String pTitle) {
            DefaultTableModel tModel = (DefaultTableModel) table.getModel();
            TableColumn tCol = new TableColumn(tModel.getColumnCount());
            tCol.setHeaderValue(pTitle);
            table.addColumn(tCol);
            tModel.addColumn(pTitle);
            tModel.fireTableStructureChanged();
        }
     
        public void addColumns(String... pTitles) {
            for (String tTitle : pTitles) {
                addColumn(tTitle);
            }
        }
     
        public void addColumns(String pTitles) {
            Object tOptions[] = pTitles.split("\\s*,\\s*");
            tOptions = JXLUtils.trim(tOptions);
            for (Object tObj : tOptions) {
                addColumn((String) tObj);
            }
        }
     
        public void addEmptyRow() {
            DefaultTableModel tModel = (DefaultTableModel) table.getModel();
            tModel.addRow((Object[]) null);
            tModel.fireTableStructureChanged();
        }
        
        public int getRowCount() {
            return table.getModel().getRowCount();
        }
     
        private static class ThisTable extends JTable {
     
            private static final long serialVersionUID = 1L;
     
            private ThisTable() {
                super();
                setVisible(true);
            }
        }
    }
     

Ähnliche Themen

  1. JScrollPane zerschießt JTable
    Von Lantis im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 14.05.10, 16:01
  2. JTable auf JScrollPane nicht sichtbar
    Von Kamikaze im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 26.06.09, 07:41
  3. JTable/JScrollpane automatisch an Fenstergröße anpassen
    Von Kalmuecke im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 21.03.08, 15:19
  4. JTable mit JScrollPane
    Von flashOr im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 21.06.07, 13:01
  5. JTable mit JScrollPane
    Von zerix im Forum Java
    Antworten: 2
    Letzter Beitrag: 11.10.05, 13:58