
BMAS
Mitglieder-
Gesamte Inhalte
244 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von BMAS
-
Wenn man z.B. einen Button angeklickt hat, wird dieser ja von einem blauen Rechteck markiert, kann man dieses irgendwie entfernen? Das sieht nämlich ein wenig blöd aus, wenn ein Button in der ToolBar blau umrandet ist und die anderen nicht... Am besten wäre es ja, wenn man das ganz abschalten könnte...
-
Wenn du die erstellte Datei im Notepad geöffnet hast, dann benutze mal das Wordpad, manchmal hat das Notepad einfach Probleme mit Formatierungen. Ansonsten kannst du noch \r probieren, vielleicht geht das ja...
-
javax.swing.JSeparator Ist glaube ich das was du suchst...
-
Neija, viel komplizierter ist das nicht, du musst halt einfach nur das machen, was ich dir in meinem vorigen Post vorgeschlagen habe und anschliessend die alte Datei und eine neue Datei mit den neuen Daten erzeugen...
-
http://www.fachinformatiker-world.de/forums/showthread.php?s=&threadid=27938&werbeid=30 Da geht es zwar um das hinzufügen von rows, aber vielleicht hilft das trotzdem weiter... Du musst halt von der Klasse TableModel (oder AbstractTableModel) erben und dein eigenes schreiben. Wenn du mit deiner Klasse fertig bist kannst du dein neues TableModel deinem Table mit: //CustomTableModel=deine Klasse! CustomTableModel customtablemodel = new CustomTableModel(daten, spaltennamen); table.setModel(customtablemodel); zuweisen... Wenn dann jemand auf den Button zum löschen klickt, liesst du die nicht markierten Daten zum Beispiel in einen Vector ein, und führst das ganze nochmal aus. Ich hoffe das war verständlich, wenn nicht, habe ich hier irgendwo im Forum schonmal den Quellcode meines TableModels gepostet...
-
Benutzt du auch ganz sicher / als Separator und nicht \ ?
-
EDIT: Ich glaube ich habs... diese Zeile ist falsch: Runtime.getRuntime().exec("C:\WINNT\system32\cmd /C c:\GenDoc_variabelTest.bat" mach´daraus mal diese: Runtime.getRuntime().exec("C:/WINNT/system32/cmd /C c:/GenDoc_variabelTest.bat"
-
Ich habe eine winzig kleine Frage, ich übergebe ein initialisiertes JTable an eine andere Klasse, warum ist das JTable dann in dieser anderen Klasse null? :eek:
-
Habe den Fehler gerade gefunden, (was bin ich auch blöd!) seht euch mal das an: designMenu.add("Metal"); designMenu.add("Motif"); designMenu.add("Windows"); was fällt euch daran auf? Genau, das sind Strings und keine MenuItems die ich da dem Menu hinzufüge... Trotzdem vielen Dank!
-
@Jaraz hier nochmal der ganze Code der Klasse: import javax.swing.BorderFactory; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JInternalFrame; import java.util.StringTokenizer; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import java.awt.GridLayout; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.JToolBar; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.UIManager; import javax.swing.SwingUtilities; import javax.swing.JDesktopPane; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public final class HauptFrame extends javax.swing.JFrame implements ActionListener { private JPanel norden = new JPanel(); private JButton bSuche; private JButton bDatenpflege; private JButton bBewert; private JButton bEinstellungen; private JButton bAdmin; private JButton bEnde; private JMenuBar hauptMenuBar = new JMenuBar(); private JMenu hauptMenu = new JMenu("Einstellungen"); private JMenu verbMenu = new JMenu("Verbindung"); private JMenu ansichtMenu = new JMenu("Ansicht"); private JMenu designMenu = new JMenu("GUI-Design"); private JMenuItem metal = new JMenuItem("Metal"); private JMenuItem motif = new JMenuItem("Motif"); private JMenuItem windows = new JMenuItem("Windows"); private TableFrame tableframe; private JDesktopPane desktop = new JDesktopPane(); private JPanel buttonPanel = new JPanel(); private JButton bOK = new JButton(new ImageIcon("C:/images/tick_blue.gif")); private JButton bZur = new JButton(new ImageIcon("C:/images/cross_red.gif")); private JSeparator sepp = new JSeparator(); public HauptFrame() { init(); JToolBar toolBar = new JToolBar(); toolBar = createToolBar(toolBar); JSeparator sep = new JSeparator(javax.swing.SwingConstants.HORIZONTAL); JSeparator sepp = new JSeparator(javax.swing.SwingConstants.HORIZONTAL); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(norden, BorderLayout.NORTH); norden.setLayout(new GridBagLayout()); GridBagConstraints csep = new GridBagConstraints(); csep.gridx = 0; csep.gridy = 1; csep.fill = GridBagConstraints.HORIZONTAL; csep.weightx = 1.0; csep.gridwidth = 1; csep.anchor = GridBagConstraints.WEST; csep.gridwidth = GridBagConstraints.REMAINDER; GridBagConstraints ctoolBar = new GridBagConstraints(); ctoolBar.gridx = 0; ctoolBar.gridy = 0; ctoolBar.weightx = 1.0; ctoolBar.gridwidth = 1; ctoolBar.anchor = GridBagConstraints.WEST; ctoolBar.gridwidth = GridBagConstraints.REMAINDER; norden.add(toolBar, ctoolBar); norden.add(sep, csep); hauptMenu.add(ansichtMenu); ansichtMenu.add(designMenu); designMenu.add("Metal"); designMenu.add("Motif"); designMenu.add("Windows"); hauptMenu.add(verbMenu); verbMenu.add("Connectingstring"); verbMenu.add("Servername"); hauptMenuBar.add(hauptMenu); setJMenuBar(hauptMenuBar); metal.addActionListener(this); motif.addActionListener(this); windows.addActionListener(this); desktop.setBorder(BorderFactory.createLoweredBevelBorder()); this.getContentPane().add(desktop, BorderLayout.CENTER); setVisible(true); this.pack(); setResizable(true); setTitle("Lieferanten und Dienstleiter Datenbank, Vers. 0.9"); this.validate(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == bEnde) System.exit(0); if (e.getSource() == bSuche) { JInternalFrame jif = new JInternalFrame("Suche", false, true, false, true); jif.getContentPane().add(new SearchPanel()); jif.setVisible(true); jif.setPreferredSize(new Dimension(420, 220)); jif.setFrameIcon(new ImageIcon("C:/images/Find16.gif")); desktop.add(jif); desktop.revalidate(); } if (e.getSource() == bDatenpflege) { } if (e.getSource() == bBewert) { } if (e.getSource() == bAdmin) { } if (e.getSource().equals(metal)) { try { UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); SwingUtilities.updateComponentTreeUI(this); } catch (Exception ex) { } } if (e.getSource().equals(motif)) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); SwingUtilities.updateComponentTreeUI(this); } catch (Exception ex) { } } if (e.getSource().equals(windows)) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); SwingUtilities.updateComponentTreeUI(this); } catch (Exception ex) { } } } public JToolBar createToolBar(JToolBar toolBar) { toolBar.setOrientation(javax.swing.SwingConstants.HORIZONTAL); toolBar.add(bSuche); toolBar.add(bDatenpflege); toolBar.add(bBewert); toolBar.addSeparator(); toolBar.add(bEinstellungen); toolBar.add(bAdmin); toolBar.addSeparator(); toolBar.add(bEnde); toolBar.addSeparator(); toolBar.setFloatable(false); return toolBar; } public void init() { bSuche = new JButton(new ImageIcon("C:/images/Find24.gif")); bEinstellungen = new JButton(new ImageIcon("C:/images/Preferences24.gif")); bBewert = new JButton(new ImageIcon("C:/images/BARCHART.gif")); bDatenpflege = new JButton(new ImageIcon("C:/images/Edit24.gif")); bAdmin = new JButton(new ImageIcon("C:/images/Server24.gif")); bEnde = new JButton(new ImageIcon("C:/images/door2.gif")); bSuche.setToolTipText("Suche"); bEinstellungen.setToolTipText("Einstellungen"); bBewert.setToolTipText("Lieferantenbewertung"); bDatenpflege.setToolTipText( "Datenpflege: Erstellen, Löschen und Ändern von Datensätzen"); bAdmin.setToolTipText("Administration: Vergabe von Benutzerrechten"); bEnde.setToolTipText("Ende"); desktop.setBackground(Color.gray); bSuche.addActionListener(this); bDatenpflege.addActionListener(this); bBewert.addActionListener(this); bEinstellungen.addActionListener(this); bAdmin.addActionListener(this); bEnde.addActionListener(this); desktop.setLayout(new FlowLayout()); } public static void main(java.lang.String[] args) { new HauptFrame(); } } [/PHP] Ich habe jetzt das == durch equals() ersetzt, macht aber keinen Unterschied, das Event wird noch immer nicht gefeuert. :confused: @Snowghost Ich werde es mal versuchen, melde mich dann...
-
Könnt ihr mir weiterhelfen? Ich habe eine JMenuBar mit ein paar JMenus und JMenuItems erstellt und hab´ den JMenuItems dann einen ActionListener zugewiesen aber die feuern kein Event ab! :confused: Sprich wenn ich die anklicke passiert nichts... Hier erstelle ich mein MenuBar und füge es dann meinem JFrame hinzu... hauptMenu.add(ansichtMenu); ansichtMenu.add(designMenu); designMenu.add("Metal"); designMenu.add("Motif"); designMenu.add("Windows"); hauptMenu.add(verbMenu); verbMenu.add("Connectingstring"); verbMenu.add("Servername"); hauptMenuBar.add(hauptMenu); setJMenuBar(hauptMenuBar); metal.addActionListener(this); motif.addActionListener(this); windows.addActionListener(this); [/PHP] Und das soll dann passieren, wenn man die JMenuItems metal, motif oder windows anklickt... (die InternalFrames einfach mal ignorieren, die sind für was anderes...) [PHP] public void actionPerformed(ActionEvent e) { if (e.getSource() == bEnde) System.exit(0); if (e.getSource() == bSuche) { JInternalFrame jif = new JInternalFrame("Suche", false, true, false, true); jif.getContentPane().add(new SearchPanel()); jif.setVisible(true); jif.setPreferredSize(new Dimension(420, 220)); jif.setFrameIcon(new ImageIcon("C:/images/Find16.gif")); desktop.add(jif); desktop.revalidate(); } /* if (e.getSource() == bEinstellungen) { JInternalFrame jif = new JInternalFrame("Einstellungen", false, true, false, true); jif.getContentPane().add(new EinstellungPanel()); jif.setVisible(true); jif.setPreferredSize(new Dimension(420, 220)); jif.setFrameIcon(new ImageIcon("C:/images/Preferences16.gif")); desktop.add(jif); desktop.revalidate(); }*/ if (e.getSource() == bDatenpflege) { } if (e.getSource() == bBewert) { } if (e.getSource() == bAdmin) { } //HIER GEHT´s LOS! if (e.getSource() == metal) { try { UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); SwingUtilities.updateComponentTreeUI(this); } catch (Exception ex) { } } if (e.getSource() == motif) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); SwingUtilities.updateComponentTreeUI(this); } catch (Exception ex) { } } if (e.getSource() == windows) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); SwingUtilities.updateComponentTreeUI(this); } catch (Exception ex) { } } } Die Anzeige funktioniert einwandfrei, nur passiert wie gesagt einfach ncihts, wenn ich im JMenu auf metal, windows oder motif klicke... Es wird erst gar kein Event gefeuert, habe ich getestet (mit nem simplen System.out.println("Hallo"); am Anfang der Methode, die wird gar nicht erst aufgerufen...)
-
oder mit validate()?
-
Klingt irgendwie komisch... :confused: Starte mal dein Programm und vergrössere dann deinen Frame, dadurch wird alles nochmal gezeichnet, ich habe irgendwo gelesen, dass ältere jdk Versionen als 1.3.1 manchmal Probleme mit dem repaint() haben, vielleicht liegt es daran. Wenn, dann füge einfach noch ein validate(); in deinen Code ein und zwar nachdem du dein Panel zum Frame hinzugefügt hast.
-
Die Sache mit AbstractTableModel klingt interessant, werde es mal ausprobieren... Ansonsten nochmal danke euch allen!
-
JUHHUUUUU! Danke jetzt geht alles ganz prima! Die Tablelle kann ich jetzt updaten also kann der Benutzer nach beliebigen Dingen suchen, der Select Befehl wird erstellt und das Ergebnis im JTable angezeigt! Danke Jungs! So und da alles geht, hier mal der Quellcode, für diejenigen, die dieselben Probleme haben: import java.util.Vector; public final class CustomTableModel implements javax.swing.table.TableModel { private int numcols, numrows; private Vector daten; private Vector spalten; public CustomTableModel(Vector daten, Vector spalten) { this.daten = daten; this.spalten = spalten; this.numrows = daten.indexOf(daten.lastElement()) + 1; this.numcols = spalten.indexOf(spalten.lastElement()) + 1; } public void addTableModelListener(javax.swing.event.TableModelListener l) { } public Class getColumnClass(int columnIndex) { return String.class; } public int getColumnCount() { return numcols; } public String getColumnName(int columnIndex) { return spalten.elementAt(columnIndex).toString(); } public int getRowCount() { return numrows; } public Object getValueAt(int rowIndex, int columnIndex) { { try { Vector Zeile = (Vector) daten.elementAt(rowIndex); return Zeile.elementAt(columnIndex); } catch (ArrayIndexOutOfBoundsException e) { return null; } } } public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } public void removeTableModelListener(javax.swing.event.TableModelListener l) { } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } }[/PHP] Irgendwo in eurem Programm muss dann halt noch ein JTable erstellt werden, und ihm jedesmal ein neues Model (also das von oben) mit setModel() zugewiesen werden, natürlich mit den neuen Daten die die Tabelle enthalten soll...
-
3 14 Exception occurred during event dispatching: java.lang.ArrayIndexOutOfBoundsException: 3 >= 3 java.lang.Throwable(java.lang.String) java.lang.Exception(java.lang.String) java.lang.RuntimeException(java.lang.String) java.lang.IndexOutOfBoundsException(java.lang.String) java.lang.ArrayIndexOutOfBoundsException(java.lang.String) java.lang.Object java.util.Vector.elementAt(int) java.lang.Object gui_v_200.CustomTableModel.getValueAt(int, int) java.lang.Object javax.swing.JTable.getValueAt(int, int) java.awt.Component javax.swing.JTable.prepareRenderer(javax.swing.table.TableCellRenderer, int, int) void javax.swing.plaf.basic.BasicTableUI.paintCell(java.awt.Graphics, java.awt.Rectangle, int, int) void javax.swing.plaf.basic.BasicTableUI.paintRow(java.awt.Graphics, int) void javax.swing.plaf.basic.BasicTableUI.paint(java.awt.Graphics, javax.swing.JComponent) void javax.swing.plaf.ComponentUI.update(java.awt.Graphics, javax.swing.JComponent) void javax.swing.JComponent.paintComponent(java.awt.Graphics) void javax.swing.JComponent.paint(java.awt.Graphics) void javax.swing.JComponent.paintChildren(java.awt.Graphics) void javax.swing.JComponent.paint(java.awt.Graphics) void javax.swing.JViewport.paintViaBackingStore(java.awt.Graphics, java.awt.Rectangle) void javax.swing.JViewport.paint(java.awt.Graphics) void javax.swing.JComponent.paintChildren(java.awt.Graphics) void javax.swing.JComponent.paint(java.awt.Graphics) void javax.swing.JComponent.paintChildren(java.awt.Graphics) void javax.swing.JComponent.paint(java.awt.Graphics) void javax.swing.JComponent.paintWithBuffer(javax.swing.JComponent, java.awt.Graphics, java.awt.Rectangle, java.awt.Image) void javax.swing.JComponent._paintImmediately(int, int, int, int) void javax.swing.JComponent.paintImmediately(int, int, int, int) void javax.swing.RepaintManager.paintDirtyRegions() void javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run() void javax.swing.SystemEventQueueUtilities.processRunnableEvent(javax.swing.SystemEventQueueUtilities$RunnableEvent) void javax.swing.SystemEventQueueUtilities.access$0(javax.swing.SystemEventQueueUtilities$RunnableEvent) void javax.swing.SystemEventQueueUtilities$RunnableTarget.processEvent(java.awt.AWTEvent) void java.awt.Component.dispatchEventImpl(java.awt.AWTEvent) void java.awt.Component.dispatchEvent(java.awt.AWTEvent) void java.awt.EventQueue.dispatchEvent(java.awt.AWTEvent) boolean java.awt.EventDispatchThread.pumpOneEvent() void java.awt.EventDispatchThread.pumpEvents(java.awt.Conditional) void java.awt.EventDispatchThread.run()
-
Wie sehen eigentlich die Indizes von einem Vector aus? Hintergrund: Ich möchte für mein JTable ein eigenes Model erstellen, damit ich es updaten kann , wenn der User eine neue Abfrage startet und ich auch ein bisschen mit den Farben herumspielen kann. Das hat auch ganz gut geklappt, ich übergebe dem Konstruktor des Models den Vector für die Spaltennamen und den Vector für die Daten, sowie die Spaltenanzahl des ResultSets aus dem der Vector erstellt wurde. Nur eine Methode bereitet mir tierisch Kopfschmerzen, nämlich die getValueAt(int,int); Ich kann nämlich nur einen Index angeben, wenn ich aus einem Vector lesen will, aber nicht mehrere, um wie in diesem Fall das Element in der Spalte x und der Spalte y zu bestimmen... Meine Lösung sieht im Moment so aus: public Object getValueAt(int rowIndex, int columnIndex) { int position; if (rowIndex!=0) { position=rowIndex+1; position=position*numcols; position=position+columnIndex; } else position=columnIndex; return daten.elementAt(position); }[/PHP] und hier ist der Konstruktor: [PHP]public CustomTableModel(Vector daten, Vector spalten, int numcols) { this.daten=daten; this.spalten=spalten; this.numcols=0; this.numrows=daten.indexOf(daten.lastElement())+1; this.numcols=spalten.indexOf(spalten.lastElement())+1; System.out.println(numrows+" "+numcols); } Meine Frage warum geht das nicht? Ich bekomme da immer eine ArrayOutOfBoundsException...
-
Hat sich erledigt... Sorry.
-
Nein, du schreibst nicht zuviel, ist genau richtig so du brauchst auch nichts zu reduzieren Dankeschön jetzt geht das. Aber warum haben meine spalten in der JTable keinen Namen?
-
Bitte, bitte, bitte! Hilfe!
-
Hmm, vielleicht habe ich mich zu früh gefreut, ich habe nochmal alles umgeschrieben und meine Sql Klasse soweit verändert, dass sie (hoffentlich) leichter verständlich ist und statt einem Object einen Vector zurückgibt, aber mein JTable zeigt nur den ersten Datensatz an und das 10 mal (oder halt so oft wie Datensätze im ResultSet vorhanden sind). Wenn ich mir den Vector mit System.out.println ausgeben lasse, sieht alles richtig aus, die verschiedenen Datensätze sind drinnen und nicht 10 mal derselbe... hier mal der Code der neuen Sql Klasse: import java.util.Vector; import java.sql.*; import java.util.StringTokenizer; public final class Sql { //private ResultSet rset; private Statement stmt; private Connection connection; public Sql() throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection connection = DriverManager.getConnection("jdbc:odbc:MList", "root", ""); stmt = connection.createStatement(); } public Sql(String driver, String url, String user, String pw) throws Exception { Class.forName(driver); Connection connection = DriverManager.getConnection(url, user, pw); stmt = connection.createStatement(); } public void close() { try { connection.close();stmt.close(); } catch (Exception e) { connection=null; } } public void connect() {} public void finalize() {close();} public Vector getColumnNames(ResultSet rset) throws SQLException{ Vector columnnames = new Vector(); int cols = rset.getMetaData().getColumnCount(); for (int i = 1; i <= cols; i++){ columnnames.add(rset.getMetaData().getColumnName(i)); } return columnnames; } public String makeQuery(String wert, String table, String aktion) { String sqlquery=""; if (wert!=null && table!=null && aktion.equalsIgnoreCase("Select")) { sqlquery = "SELECT * FROM "+table+" WHERE ("; int i = 1; boolean x = false; String token; StringTokenizer st = new StringTokenizer(wert, ";"); while (st.hasMoreTokens()) { token = st.nextToken(); if (i == 1 && token.equals("-") == false) { sqlquery = sqlquery + "Lieferantenname LIKE '%" + token + "%'"; x = true; } if (i == 2 && token.equals("-") == false) { if (x == false) { sqlquery = sqlquery + "Lieferantennr='" + token + "'"; x = true; } else sqlquery = sqlquery + " AND Lieferantennr='" + token + "'"; } if (i == 3 && token.equals("-") == false) { if (x == false) { x = true; sqlquery = sqlquery + "Branche='" + token + "'"; } else sqlquery = sqlquery + " AND Branche='" + token + "'"; } if (i == 4 && token.equals("-") == false) { if (x == false) sqlquery = sqlquery + "Bewertung='" + token + "'"; else sqlquery = sqlquery + " AND Bewertung='" + token + "'"; } i++; } } sqlquery = sqlquery + ");"; sqlquery = "SELECT * FROM ldd"; System.out.println(sqlquery); return sqlquery; } public ResultSet select(String sqlquery) throws Exception { return (stmt.executeQuery(sqlquery)); } public Vector toVector(ResultSet rset) throws Exception { ResultSetMetaData rsetmd = rset.getMetaData(); int cols = rsetmd.getColumnCount(); System.out.println(cols); Vector datensatz = new Vector(); Vector daten = new Vector(); while (rset.next()) { for (int i = 1; i <= cols; i++) { datensatz.add(rset.getString(i)); } daten.add(datensatz); } return daten; } } [/PHP] Und hier mein JTable: [PHP] import java.util.Vector; import java.sql.ResultSet; import javax.swing.JScrollPane; import java.awt.Insets; import java.awt.GridBagLayout; import javax.swing.JTable; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.JButton; import java.awt.GridBagConstraints; import java.awt.BorderLayout; import javax.swing.ImageIcon; public final class TableFrame extends javax.swing.JFrame{ private JTable datenTable = new JTable(); private Sql sql = new Sql("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:MList","root",""); private JPanel süden = new JPanel(); private JSeparator sep = new JSeparator(); private JButton bOK = new JButton(new ImageIcon("C:/images/tick_blue.gif")); private JButton bZur = new JButton(new ImageIcon("C:/images/cross_red.gif")); public TableFrame(String werte) throws Exception{ int i = 0; String sqlquery = sql.makeQuery(werte,"ldd","select"); ResultSet rset = sql.select(sqlquery); Vector daten = sql.toVector(rset); Vector spalten = sql.getColumnNames(rset); JTable table = new JTable(daten, spalten); süden.setLayout(new GridBagLayout()); GridBagConstraints csep = new GridBagConstraints(); csep.gridx = 0; csep.gridy = 0; csep.fill = GridBagConstraints.HORIZONTAL; csep.weightx = 1.0; csep.gridwidth = 1; csep.anchor = GridBagConstraints.WEST; csep.gridwidth = GridBagConstraints.REMAINDER; csep.insets = new Insets(4, 4, 4, 4); GridBagConstraints cbOK = new GridBagConstraints(); cbOK.gridx = 0; cbOK.gridy = 1; cbOK.weightx = 1.0; cbOK.gridwidth = 2; cbOK.anchor = GridBagConstraints.WEST; cbOK.fill = GridBagConstraints.REMAINDER; cbOK.insets = new Insets(4, 4, 4, 4); GridBagConstraints cbZur = new GridBagConstraints(); cbZur.gridx = 1; cbZur.gridy = 1; cbZur.weightx = 1.0; cbZur.gridwidth = 2; cbZur.anchor = GridBagConstraints.EAST; cbZur.fill = GridBagConstraints.REMAINDER; cbZur.insets = new Insets(4, 4, 4, 4); süden.add(sep, csep); süden.add(bOK, cbOK); süden.add(bZur, cbZur); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER); this.getContentPane().add(süden, BorderLayout.SOUTH); this.setVisible(true); this.pack(); } public static void main(String[] args) { try {new TableFrame("-;-;-;A");}catch(Exception e){e.printStackTrace();}} }
-
>Da ich (sorry) Durch Deinen Code langsam nicht mehr so ganz durchblicke, Brauchst dich nicht entschuldigen, geht mir auch so > Hoffe das hilft dir weiter. Falls du eine gute Klasse erstellst um Tabellen mit dem Ergebnis beliebiger SQL-Abfragen zu füllen, würde ich mich freuen wenn du die hier posten könntest. Werde ich machen, und vielen Dank für deine Hilfe (natürlich gilt das auch für Jaraz), ihr habt mir sehr geholfen! Ohne euch hätte ich wahrscheinlich nochmal ganz von vorne angefangen!
-
wenn ich ein System.out.println, direkt hinter "int rows=rset.getRow();" setze wird nichts ausgegeben... Danach habe ich es mal so probiert: private Object[][] toObject (ResultSet rset) throws Exception{ System.out.println("0"); ResultSetMetaData rsetmd = rset.getMetaData(); System.out.println("1"); int cols = rsetmd.getColumnCount(); System.out.println("2"); System.out.println(rset.last()); System.out.println("3"); int rows=rset.getRow(); System.out.println("4"); rset.first(); System.out.println("5"); System.out.println(cols+" "+rows); int i=0; int p=0; Object[][] o = new Object[rows][cols]; while(i<=rows) { for (p = 0; p < 100; p++){ rset.next(); o[i][p]=rset.getString(p+1); System.out.println(o[i][p].toString()); } i++; } stmt.close(); return (o); }[/PHP] Bis System.out.println(2); kommt das Programm noch, danach gibt es eine Exception: ResultSet closed... wenn ich meine Connection und mein Statement nicht schliesse, bekomme ich eine: java.lang.UnsupportedOperationException java.lang.Throwable() java.lang.Exception() java.lang.RuntimeException() java.lang.UnsupportedOperationException() boolean sun.jdbc.odbc.JdbcOdbcResultSet.last() java.lang.Object [][] gui_v_200.Sql.toObject(java.sql.ResultSet) java.lang.Object [][] gui_v_200.Sql.select(java.lang.String, java.lang.String) gui_v_200.TableFrame(java.lang.String) void gui_v_200.TableFrame.main(java.lang.String []) wenn nur eins von beiden schliesse auch... Anscheinend geht last() wirklich nicht, aber wie könnte ich es denn anders machen? absolute(-1) ist genau dasselbe und mehr habe ich in der Api nicht gefunden :confused:
-
Okay, ist draussen, aber jetzt kommt wieder ResultSet is closed... und der JFrame mit dem JTable, welches die Daten enthalten soll wird noch immer nicht angezeigt... ICh habe da einen Verdacht, meine toObject Methode funktioniert wohl nicht, da ich mir ja den jeweiligen Datensatz der in das Object[][] geschrieben wird auch ausgeben lasse, dieser aber nicht ausgegeben wird. Fällt irgendwem nochwas an der Methode auf? Oder gibt es eine andere Möglichkeit sein ResultSet in einem JTable anzeigen zu lassen?
-
Ich habe das ganze nochmal umgeschrieben: Dies ist die neue SQL Klasse import java.sql.*; import java.util.StringTokenizer; public final class Sql { private ResultSet rSet; public Sql() { } private String makeQuery(String wert, String table, String aktion) { String sqlquery = ""; if (wert != null && table != null && aktion.equalsIgnoreCase("Select")) { sqlquery = "SELECT * FROM " + table + " WHERE ("; int i = 1; boolean x = false; String token; StringTokenizer st = new StringTokenizer(wert, ";"); while (st.hasMoreTokens()) { token = st.nextToken(); if (i == 1 && token.equals("-") == false) { sqlquery = sqlquery + "Lieferantenname LIKE '%" + token + "%'"; x = true; } if (i == 2 && token.equals("-") == false) { if (x == false) { sqlquery = sqlquery + "Lieferantennr='" + token + "'"; x = true; } else sqlquery = sqlquery + " AND Lieferantennr='" + token + "'"; } if (i == 3 && token.equals("-") == false) { if (x == false) { x = true; sqlquery = sqlquery + "Branche='" + token + "'"; } else sqlquery = sqlquery + " AND Branche='" + token + "'"; } if (i == 4 && token.equals("-") == false) { if (x == false) sqlquery = sqlquery + "Bewertung='" + token + "'"; else sqlquery = sqlquery + " AND Bewertung='" + token + "'"; } i = i + 1; } } sqlquery = sqlquery + ");"; sqlquery = "SELECT * FROM ldd"; System.out.println(sqlquery); return sqlquery; } public Object[][] select(String wert, String table) throws Exception { int treffer = 0; String sqlquery = makeQuery(wert, table, "select"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection connection = DriverManager.getConnection("jdbc:odbc:MList", "root", ""); Statement stmt; stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rSet = stmt.executeQuery(sqlquery); while (rSet.next()); treffer++; System.out.println("0"); return toObject(rSet); } private Object[][] toObject(ResultSet rset) throws Exception { ResultSetMetaData rsetmd = rset.getMetaData(); int cols = rsetmd.getColumnCount(); rset.last(); int rows = rset.getRow(); int i = 0; int p = 0; Object[][] o = new Object[rows][cols]; while (i <= rows) { for (p = 0; p < cols; p++) { o[i][p] = rset.getString(p + 1); System.out.println(o[i][p].toString()); } i++; } return (o); } }[/PHP] An der TableFrame Klasse habe ich nur diese Zeile "datenTable = new JTable(sql.select (werte,"ldd"),columnnames);" ein wenig geändert... [PHP] import java.awt.Insets; import java.awt.GridBagLayout; import javax.swing.JTable; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.JButton; import java.awt.GridBagConstraints; import java.awt.BorderLayout; import javax.swing.ImageIcon; public class TableFrame extends javax.swing.JFrame{ private JTable datenTable = new JTable(); private Sql sql = new Sql(); private JPanel süden = new JPanel(); private JSeparator sep = new JSeparator(); private JButton bOK = new JButton(new ImageIcon("C:/images/tick_blue.gif")); private JButton bZur = new JButton(new ImageIcon("C:/images/cross_red.gif")); public TableFrame(String werte) throws Exception{ int i=0; String[] columnnames = { "iD","Branche","Leistungsverzeichnis","Lieferantenname", "Adresse", "Telefon" ,"Ansprechpartner","Anspr. P. Einkäufer","Anspr. P. AG Einkauf","Bewertung" ,"Bemerkung zu Bewertung", "Bewertungszeitraum","Rahmenvertrag","BM Nummer" }; datenTable = new JTable(sql.select(werte,"ldd"),columnnames); süden.setLayout(new GridBagLayout()); GridBagConstraints csep = new GridBagConstraints(); csep.gridx = 0; csep.gridy = 0; csep.fill = GridBagConstraints.HORIZONTAL; csep.weightx = 1.0; csep.gridwidth = 1; csep.anchor = GridBagConstraints.WEST; csep.gridwidth = GridBagConstraints.REMAINDER; csep.insets = new Insets(4, 4, 4, 4); GridBagConstraints cbOK = new GridBagConstraints(); cbOK.gridx = 0; cbOK.gridy = 1; cbOK.weightx = 1.0; cbOK.gridwidth = 1; cbOK.fill = GridBagConstraints.HORIZONTAL; cbOK.anchor = GridBagConstraints.WEST; cbOK.insets = new Insets(4, 4, 4, 4); GridBagConstraints cbZur = new GridBagConstraints(); cbZur.gridx = 1; cbZur.gridy = 1; cbZur.weightx = 1.0; cbZur.gridwidth = 1; cbZur.fill = GridBagConstraints.HORIZONTAL; cbZur.anchor = GridBagConstraints.EAST; cbZur.insets = new Insets(4, 4, 4, 4); süden.add(sep, csep); süden.add(bOK, cbOK); süden.add(bZur, cbZur); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(datenTable, BorderLayout.CENTER); this.getContentPane().add(süden, BorderLayout.SOUTH); this.setVisible(true); this.pack(); } public static void main(String[] args) { try {new TableFrame("-;-;-;A");}catch(Exception e){e.printStackTrace();}} } Jetzt bekomme ich aber eine: java.lang.UnsupportedOperationException java.lang.Throwable() java.lang.Exception() java.lang.RuntimeException() java.lang.UnsupportedOperationException() java.sql.Statement sun.jdbc.odbc.JdbcOdbcConnection.createStatement(int, int) java.lang.Object [][] gui_v_200.Sql.select(java.lang.String, java.lang.String) gui_v_200.TableFrame(java.lang.String) void gui_v_200.TableFrame.main(java.lang.String []) vorgeworfen, ich denke mal das ganze bricht noch in der select Methide in der Klasse SQL ab.