dark-lost-soul Geschrieben 6. September 2007 Geschrieben 6. September 2007 Hi, ich habe mittlerweile die JTable auf meinem Frame und die Daten sind sogar auch schon drin. So nun zu meinen Problemen: - Scollbars werden nicht angezeigt obwohl ich den dafür nötigen Befehl benutzt habe - Die Spaltenbreite lässt sich irgendwie nicht ändern - Und die Spaltennamen werden mir auch nicht angezeigt Hoffentlich könnt ihr mir weiterhelfen Hier die Init methode für die Gui public void initFrame(){ //Menü zusammenbauen JMenuBar menubar = new JMenuBar(); //File JMenu menu = new JMenu("File"); JMenuItem menuItem = new JMenuItem(S_LOAD); menuItem.addActionListener(this); menu.add(menuItem); menu.addSeparator(); menuItem = new JMenuItem(S_CLS); menuItem.addActionListener(this); menu.add(menuItem); menubar.add(menu); //Configure menu = new JMenu("Configure"); menuItem = new JMenuItem(S_SET); menuItem.addActionListener(this); menu.add(menuItem); menubar.add(menu); //Help menu = new JMenu("Help"); menuItem = new JMenuItem(S_HELP); menuItem.addActionListener(this); menu.add(menuItem); menu.addSeparator(); menuItem = new JMenuItem(S_ABOUT); menuItem.addActionListener(this); menu.add(menuItem); menubar.add(menu); setJMenuBar(menubar); //setzen des Layouts this.setLayout(new BorderLayout()); //einfügen der Tabelle aTable = new JTable(new DefaultTableModel()); aTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); aTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); this.add(aTable, BorderLayout.CENTER); JTableHeader header = aTable.getTableHeader(); header.setUpdateTableInRealTime(true); header.setReorderingAllowed(false); } aTable ist global deklariert und hier die methode die die Tabelle mit Daten füttert protected void onOpenTable(){ String sqlDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String sqlConnStr = "jdbc:microsoft:sqlserver://GXDEFR-S3007;DatabaseName=LIMS_View;User=LIMS_View;Password=xxx"; String query = "SELECT * FROM neueDaten1198"; String[] tableColumsName = new String[42]; DefaultTableModel aModel = (DefaultTableModel) aTable.getModel(); try{ Class.forName(sqlDriver); System.out.println("Database driver loaded"); } catch (ClassNotFoundException ce){ System.out.println("ClassNotFound-FEHLER: " + ce.getMessage()); } try{ Connection con = DriverManager.getConnection(sqlConnStr); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); //---------------------------------------------------- // Loop through the ResultSet and transfer in the Model java.sql.ResultSetMetaData rsmd = rs.getMetaData(); int colNo = rsmd.getColumnCount(); for(int i=0; i<colNo; i++) tableColumsName[i]=rsmd.getColumnName(i+1); for(int i=0; i<colNo; i++) aTable.getColumnModel().getColumn(i).setPreferredWidth(1000); aModel.setColumnIdentifiers(tableColumsName); while(rs.next()){ Object[] objects = new Object[colNo]; for(int i=0; i<colNo; i++){ objects[i]=rs.getObject(i+1); } aModel.addRow(objects); } aTable.setModel(aModel); //---------------------------- rs.close(); stmt.close(); } catch (SQLException e){ System.out.println("SQL-FEHLER: " + e.getMessage()); } } für eure hilfe danke ich euch im vorraus greetz dark Zitieren
P3AC3MAK3R Geschrieben 6. September 2007 Geschrieben 6. September 2007 Ich sehe in Deinem Code kein JScrollPane. Hier ist ein Beispiel für die Benutzung: http://www.exampledepot.com/egs/javax.swing.table/Hscroll.html Zitieren
dark-lost-soul Geschrieben 6. September 2007 Autor Geschrieben 6. September 2007 Hab Sie eingebaut aber sie erscheint nicht oO Irgendwann drehe ich hier noch durch Zitieren
P3AC3MAK3R Geschrieben 6. September 2007 Geschrieben 6. September 2007 Wie sieht der relevante Quellcodeausschnitt aus? Zitieren
dark-lost-soul Geschrieben 6. September 2007 Autor Geschrieben 6. September 2007 Ich denke mal das sind diese 2 hier wobei beim ersten nur der untere teil relevant ist public void initFrame(){ //Menü zusammenbauen //setzen des Layouts this.setLayout(new BorderLayout()); //einfügen der Tabelle aTable = new JTable(new DefaultTableModel()); aTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane scrollPane = new JScrollPane(aTable); aTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); this.add(aTable, BorderLayout.CENTER); JTableHeader header = aTable.getTableHeader(); header.setUpdateTableInRealTime(true); header.setReorderingAllowed(false); } hab mal den teil rausgenommen wo das menü zusammen gebaut wird und hier noch der teil wo die daten in die tabelle kommen protected void onOpenTable(){ String sqlDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String sqlConnStr = "jdbc:microsoft:sqlserver://GXDEFR-S3007;DatabaseName=LIMS_View;User=LIMS_View;Password=xxxxxxxxxxx"; String query = "SELECT * FROM neueDaten1198"; String[] tableColumsName = new String[45]; DefaultTableModel aModel = (DefaultTableModel) aTable.getModel(); try{ Class.forName(sqlDriver); System.out.println("Database driver loaded"); } catch (ClassNotFoundException ce){ System.out.println("ClassNotFound-FEHLER: " + ce.getMessage()); } try{ Connection con = DriverManager.getConnection(sqlConnStr); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); //---------------------------------------------------- // Loop through the ResultSet and transfer in the Model java.sql.ResultSetMetaData rsmd = rs.getMetaData(); int colNo = rsmd.getColumnCount(); for(int i=0; i<colNo; i++) tableColumsName[i]=rsmd.getColumnName(i+1); //for(int i=0; i<colNo; i++) // (aTable.getColumn(tableColumsName[i])).setPreferredWidth(100); aModel.setColumnIdentifiers(tableColumsName); while(rs.next()){ Object[] objects = new Object[colNo]; for(int i=0; i<colNo; i++){ objects[i]=rs.getObject(i+1); } aModel.addRow(objects); } aTable.setModel(aModel); aTable.repaint(); //---------------------------- rs.close(); stmt.close(); } catch (SQLException e){ System.out.println("SQL-FEHLER: " + e.getMessage()); } } Zitieren
Jaraz Geschrieben 6. September 2007 Geschrieben 6. September 2007 du fügst aTable dem Frame hinzu und nicht scrollPane Zitieren
dark-lost-soul Geschrieben 6. September 2007 Autor Geschrieben 6. September 2007 könntest du das evtl genauer erläutern kann dir nicht so ganz folgen soll ich statt this.add(aTable, BorderLayout.CENTER); einfach scrollPane.add(aTable); hinschreiben `? Zitieren
etreu Geschrieben 10. September 2007 Geschrieben 10. September 2007 Du sollst die Tabelle dem JScrollPane zuordnen und das JScrollPane dann dem Frame. Zitieren
speedi Geschrieben 12. September 2007 Geschrieben 12. September 2007 Das Problem ist das JTables einfach so groß sind wie sie sein müssen um ihre Daten anzuzeigen. Sie zeichnen sich dann einfach mehr oder weniger im nicht sichtbaren Bereich weiter. Wie der User das sichtbar machen kann ist der JTable absolut wurscht. Deshalb erstellst du ein JScrollPane, also eine große Fläche, die aber in deinen Anzeigebereich passt und setzt da rein dann die JTable mit ihrere X-beliebigen wahrscheinlich übertriebenen Größe. Damit dein JScrollPane auch angezeigt wird addest du das ansteller der direkten JTable in dein Frame. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.