-
Hallo,
ich habe vor kurzem eine Tabelle mit Swing erstellt , die Tabelle hat folgende spalten
(Name, Vorname, Wohnort, Alter , Verheiratet -Boolean-Checkbox), die daten sollen über ein JDialog eingegeben werden, das habe ich auch erstellt.
das problem jetzt wenn ich die daten eingebe und OK drücke werden diese nicht in die tabelle angezeigt (das ganze jetzt ohne persistence ) ich habe keine datenbank , will erst mal nur so probieren. also einfach die daten über JDialog eingeben und in der tabelle anzeigen
hat vielleicht jemand eine Idee, was mir noch fehlt?
ich danke euch im voraus
-
20.10.11 09:18 #2Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
Code gelöscht
Geändert von javama (21.10.11 um 09:45 Uhr)
-
20.10.11 10:05 #4
Moin,
hmm, habe jetzt mal auf die Schnelle da durchgescrollt, um den relevanten Code zu finden
Ich sehe zwar im "actionPerformed" zum buttonOK, dass Du da Daten ermittelst, aber wo werden sie denn in Tabelle eingefügt? (TableModel ?)
Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
das ist der Punkt!
wie konnte ich das machen dass die Daten in MitarbeiterGui eingefügt werden?
-
20.10.11 10:46 #6SE Tutorials.de Gastzugang
MADE MY DAY
@TO
Du hast aber schon mal was von Paket-Imports gehört oder ?
Bei der langen Liste an Imports baut der Compiler aus Performance-Gründen daraus eh folgendes :
Code java:1 2 3 4
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*;
Das kannst du gerne mit einem de-Compiler nachprüfen. Ab einer gewissen Menge an Imports aus dem selben Paket wird auf die Strategie "importiere das gesamte Paket* gewechselt. Nur wenn es sehr wenige Imports aus dem selben Paket sind ist eine explizite Klassenangabe sinnvoll.
Auch hat das ganze was mit Lesbarkeit und Übersicht des Codes zu tun.
Was mir dann noch weiter aufgefallen ist :
Du hast nicht ernsthaft vor ein JFrame zu serialisieren oder ? Davon abgesehen das diese Zeile ohne das Interface Serializable nutzlos ist und damit beim compilen eh rausfliegt *zumindest sollte sie das bei nem guten Compiler*.Code java:1
private static final long serialVersionUID=1L;
Wobei alles weitere um diese Zeile genau so Käse ist : Objekt-Erzeugungen gehören in einen Konstruktor / eine Methode ! ... NICHT in den static-class-Kontext ! Auch hier greift wieder der Compiler und verschiebt solche Zeilen automatisch in den Konstruktor. Also davon abgesehen das sowas garnicht möglich ist sieht es auch nicht sehr schön aus. *Und zeigt eigentlich das du noch sehr wenig Erfahrung mit Java hast.*
Auch machen mich diese 4 Zeilen sehr stutzig :
Davon abgesehen das es nur in sehr wenigen fällen Sinn hat den Inhalt des Konstruktors in eine eigene Methode auszulagern *nichts anderes machst du ... und der Compiler macht es wieder rückgängig da nacher ALLES im Konstruktor steht* gehören solche Dinge in den Konstruktor des jeweiligen Objektes.Code java:1 2
hauptauswahlgui.button1.addActionListener(this); //...
Wenn du unbedingt Child-Objekten eines Objektes einen ActionListener der aktuellen Klasse übergeben willst ... dann übergib dem Konstruktor des Objektes eine Referenz auf die aktuelle Klasse *mit this*.
Optimiert würde das *! PSEUDO-CODE ! - compilebares Beispiel* so aussehen :
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
package pseudo; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MainClass implements ActionListener { private ChildClass childObject=null; public MainClass() { childObject=new ChildClass(this); } public void actionPerformed(ActionEvent event) { } } class ChildClass { private JButton button=null; private ChildClass() { } // private NULL-Konstruktor // verhindert das ein Objekt ohne Übergabereferenz erzeugt werden kann protected ChildClass(ActionListener mainClass) { button=new JButton("BUTTON"); button.addActionListener(mainClass); } }
Dann fällt mir in der Klass DialogMitarbeiterEinfuegen noch dieser riesige GUI-Builder-Block auf ... da hast du dir ja einiges zusammen geklickt ... nicht gerade hilfreich für den Lerneffekt und -erfolg ... aber solange es funktioniert soll mich das nicht weiter stören ... auch wenn ich es deutlich optimierter schreiben kann.
Und zu guter Letzt fällt mir noch genau das auf was vfl schon sagte : du hast zwar soweit die GUI komplett ... aber von der Logik her fehlt noch das wichtigste : die Daten aus dem Input-Dialog in das TableModel zu übernehmen ...Geändert von SE (20.10.11 um 10:48 Uhr) Grund: eine Million Typo's
-
Ich habe auch keine Collection entdeckt, welche die Daten der Tabelle verwaltet. Wäre die vorhanden, könnten die Tabelle mit
JTable table = new JTable(data, columnNames);
angelegt werden. Fügst Du nämlich die Daten in die JTable ein und werden die Daten geändert dann wird das auch in der JTable angezeigt.Geändert von j2se (20.10.11 um 11:01 Uhr)
-
-
20.10.11 11:09 #9SE Tutorials.de Gastzugang
Das ist irrelevant da beim Compilen daraus eh einzlene Class-Files generiert werden. Ob du den Source jetzt in EINER Datei hast oder alles in speraten ... das spielt für die compileten Class-Files keine Rolle ...
btw : es wäre aber übersichtlicher gewesen wenn du jeden Source in einien eigenen Code-Block gepackt hättest anstatt alles in einem ... -> Lesbarkeit.
-
-
20.10.11 13:21 #11
Richtig, ob und wie der Compiler den Code optimiert, ist dem Compiler überlassen und sollte kein Einfluss auf das eigene Programmieren haben.
SPiKEe, ich weiß, dass du stolz auf deinen Texteditor bist, aber die meisten Menschen verwenden eine IDE, die einen unterstützt und einem hilft. Und viele deine Punkte (auch in früheren Threads) haben überhaupt nichts mit dem Programmier zu tun, sondern werden so von der jeweiligen IDE erzeugt.
Die Sache mit den Klassen in den Imports ist vollkommen irrelevant. Zum einen hat es keinen Einfluss auf die Ausführbarkeit und zum anderen machen das die meisten IDEs von sich aus so. Dafür jemanden anzufahren ist echt nich angebracht. Genauso auch das mit der serialVersionUID. Ich verwende Eclipse und lasse Eclipse das Teil auch immer nachgenerieren, wenn es nicht bereits vorhanden ist. Alle Klassen, die in der Hierarchie von java.awt.Component stehen, sind automatisch serialisierbar, daher kommt in den IDEs auch die Meldung wegen der serialVersionUID, denn Component implementiert das Serializable-Interface. Das heißt das hierist somit hinfällig, denn Interfaces werden genauso vererbt.Davon abgesehen das diese Zeile ohne das Interface Serializable nutzlos ist und damit beim compilen eh rausfliegt
Mach nicht jeden wegen solchen Kleinigkeiten an, ehrlich jetzt.Geändert von Akeshihiro (20.10.11 um 13:24 Uhr)
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
also SPiKEe , ich habe schon mal einen Quellcode in mehrern Files gegeben, und da hast du gemeckert, weil die leute hier keine lust haben einzelne klassen extra zu kompielieren, deswegen habe ich heute alles in eine datei geschrieben.
bis jetzt keiner hat mir einen vernünftigen Hinweis gegeben, alle sprechen nur über "import"
ich denke, das wichtigste ist, dass was ich geschickt habe funktioniert, also damit kann man anfangen.(die Optimierung kann ich später machen)
Mit einem klick auf (alt-shift-O) werden die unnötige imports entfernt.
-
20.10.11 13:57 #13SE Tutorials.de Gastzugang
@javama
Was dein Problem ist : du verarbeitest nirgends die im Input-Dialog eingegebenen Daten und kannst daher auch nicht die nicht vorhanden Daten in die JTable einfügen ...
Das OT wo wir hier gerade reinrutschen handelt lediglich darum das ich es persönlich nicht gerade produktiv finde wenn man kilometer lange Klassen-Imports hat obwohl der Compiler daraus größtenteils eh nur Package-Imports macht ... was hier einige anderst sehen ... und das ganze hat eigentlich nichts mit deinem eigentlichen Problem zu tun.
-
20.10.11 14:02 #14
Ich sag ja, dass es durch die IDE gemacht wird, denn Alt+Shift+O organisiert die Imports, entfernt die unnötigen nicht nur, sondern haut auch die Wildcards weg und macht daraus vernünftige Imports.
Aber wie dem auch sei, es wurde ja bereits gesagt, dass du irgendwie nen Model oder ne Collection, die du als Model verwenden kannst, brauchst. Ich persönlich würde mir dafür nen eigenes aus DefaultTableModel ableiten und dafür sorgen, dass es mit Objekten umgehen kann, denn es kann die Daten nur als Strings verwalten. Für dich reicht es aber für den Moment vielleicht. Mit der Methode addRow() kann man eine Zeile einfügen, das ist also sehr praktisch.
Also schau dir mal DefaultTableModel an. Davon musst du dann ein Objekt erzeugen und es irgendwie öffentlich zugänglich machen, z.B. mit einer Methode ala getModel(), damit du darauf von Außern zugreifen kannst.Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
ich habe folgendes gemacht aber geht trotzdem nicht
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
package com.verwaltungsgui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import javax.swing.table.TableRowSorter; public class MitarbeiterGui extends JPanel implements ActionListener{ private static final long serialVersionUID = 1L; JTable table; DefaultTableModel tableModel = new TableModelMitCheckBox(); TableRowSorter<DefaultTableModel> rowSorter = new TableRowSorter<DefaultTableModel>(tableModel); Mitarbeiter mitarbeiter = new Mitarbeiter(); private JPanel panelCenter, panelRechts; private JScrollPane westScrollpane; private JButton buttonEinfuegen = new JButton("Datensatz Einfügen"); private JButton buttonEinfuegenVorlage = new JButton("Datensatz Einfügen mit Vorlage"); private JButton buttonLoechen = new JButton("Datensatz Löschen"); private JButton buttonAendern = new JButton("Datensatz Ändern"); public MitarbeiterGui(Mitarbeiter mitarbeiter) { this.mitarbeiter = mitarbeiter; init(); } public void init() { table = new JTable(); table.setModel(tableModel); table.setRowSorter(rowSorter); westScrollpane = new JScrollPane(table); panelCenter = new JPanel(); westScrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); this.setLayout(new BorderLayout()); tableModel.addColumn(Mitarbeiter.SPALTE1); tableModel.addColumn(Mitarbeiter.SPALTE2); tableModel.addColumn(Mitarbeiter.SPALTE3); tableModel.addColumn(Mitarbeiter.SPALTE4); tableModel.addColumn(Mitarbeiter.SPALTE5); //table.getColumn(mitarbeiter.SPALTE1).setMaxWidth(30); table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); panelCenter.add(westScrollpane); this.add(westScrollpane, BorderLayout.CENTER); panelRechts = new JPanel(); panelRechts.setLayout(new GridLayout(6,1,10,10)); panelRechts.add(new JPanel()); panelRechts.add(buttonEinfuegen); panelRechts.add(buttonEinfuegenVorlage); panelRechts.add(buttonAendern); panelRechts.add(buttonLoechen); this.add(panelRechts, BorderLayout.EAST); buttonEinfuegen.addActionListener( this); } public String getName(){ return "Button1"; } @Override public void actionPerformed(ActionEvent arg0) { if(arg0.getSource() == buttonEinfuegen){ new DialogMitarbeiterEifuegen().setVisible(true); } } ////************************************* public void datenEinfuegen(ArrayList<Mitarbeiter> mitarbeiterList) { if (mitarbeiterList != null) { for (Mitarbeiter entry : mitarbeiterList) { tableModel.addRow(new Object[] { entry.getName(), entry.getVorname(), entry.getWohnort(), entry.getAlter(), entry.isVerheiratet()}); } } } }
und
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
package com.verwaltungsgui; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.GroupLayout.Alignment; public class DialogMitarbeiterEifuegen extends JDialog implements ActionListener{ /** * */ private static final long serialVersionUID = 1L; MitarbeiterGuiModel mitGuiModel; MitarbeiterGui mitGui; private JLabel nachname, vorname, wohnort, alter, verheiratet; private JCheckBox verheiratetBox; public JTextField t_nachname, t_vorname, t_wohnort, t_alter; private Container container; private JButton buttonOK, buttonAbbrechen; Mitarbeiter mitarbeiter; public DialogMitarbeiterEifuegen() { init(); } private void init() { container = this.getContentPane(); JPanel panel = new JPanel(); GroupLayout layout = new GroupLayout(panel); //JPanel panelUnten = new JPanel(); panel.setLayout(layout); this.pack(); nachname=new JLabel("Nachname:"); vorname=new JLabel("Vorname:"); wohnort=new JLabel("Wohnort:"); alter=new JLabel("Alter:"); verheiratet=new JLabel("Verheiratet:"); t_nachname = new JTextField(); t_vorname = new JTextField(); t_wohnort = new JTextField(); t_alter = new JTextField(); verheiratetBox=new JCheckBox(); panel.add(nachname); panel.add(t_nachname); panel.add(vorname); panel.add(t_vorname); panel.add(wohnort); panel.add(t_wohnort); panel.add(alter); panel.add(t_alter); panel.add(verheiratet); panel.add(verheiratetBox); buttonOK= new JButton("Einfügen"); buttonAbbrechen = new JButton("Abbrechen"); /** * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ /*********************************************************************** * Turn on automatically adding gaps between components **********************************************************************/ layout.setAutoCreateGaps(true); /** * Turn on automatically creating gaps between components that touch the * edge of the container and the container. */ layout.setAutoCreateContainerGaps(true); /** * Create a sequential group for the horizontal axis. */ GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup(); /** * The sequential group in turn contains two parallel groups. One * parallel group contains the labels, the other the text fields. * Putting the labels in a parallel group along the horizontal axis * positions them at the same x location. Variable indentation is used * to reinforce the level of grouping. */ hGroup.addGroup(layout.createParallelGroup().addComponent(nachname) .addComponent(vorname).addComponent(wohnort).addComponent( alter).addComponent(verheiratet).addComponent(buttonOK)); hGroup.addGroup(layout.createParallelGroup().addComponent(t_nachname) .addComponent(t_vorname).addComponent(t_wohnort) .addComponent(t_alter).addComponent(verheiratetBox).addComponent(buttonAbbrechen)); layout.setHorizontalGroup(hGroup); /*********************************************************************** * Create a sequential group for the vertical axis. **********************************************************************/ GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); /*********************************************************************** * The sequential group contains two parallel groups that align the * contents along the baseline. The first parallel group contains the * first label and text field, and the second parallel group contains * the second label and text field. By using a sequential group the * labels and text fields are positioned vertically after one another. **********************************************************************/ vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(nachname).addComponent(t_nachname)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(vorname).addComponent(t_vorname)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(wohnort).addComponent(t_wohnort)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(alter).addComponent(t_alter)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(verheiratet).addComponent(verheiratetBox)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(buttonOK).addComponent(buttonAbbrechen)); layout.setVerticalGroup(vGroup); /** * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ container.add(panel); this.pack(); this.setLocationRelativeTo(null); this.setModal(true); buttonOK.addActionListener(this); buttonAbbrechen.addActionListener(this); } @Override public void actionPerformed(ActionEvent arg0) { if(arg0.getSource() == buttonOK) { ArrayList<Mitarbeiter> mitArrayList = new ArrayList<Mitarbeiter>(); ArrayList<Mitarbeiter> mitArrayList1 = new ArrayList<Mitarbeiter>(); String name = t_nachname.getText(); String vorname = t_vorname.getText(); String wohnort = t_wohnort.getText(); int alter=0; try { alter = Integer.parseInt(t_alter.getText()); } catch (Exception e) { JOptionPane.showMessageDialog(buttonOK, "Das Alter ist falsch"); } boolean verheiratet; if(verheiratetBox.isSelected()) verheiratet = true; else verheiratet = false; mitarbeiter = new Mitarbeiter(name, vorname, wohnort, alter, verheiratet); mitArrayList.add(mitarbeiter); System.out.println("********: "+mitArrayList.size()); mitGui = new MitarbeiterGui(mitarbeiter); mitGui.datenEinfuegen(mitArrayList); System.out.println("Hallo "+mitarbeiter.getName()+ " Verheiratet: "+mitarbeiter.isVerheiratet()+ mitarbeiter.getAlter()); setVisible(false); } else this.setVisible(false); } }
Ähnliche Themen
-
Hinweis um JTable in JDialog zu aktualisieren
Von axelf76 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 13.08.09, 15:06 -
Daten aus mehreren Tabellen über Joins anzeigen
Von thinkpad im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 10.04.08, 13:08 -
Daten aus einer Excel oder CSV Datei in eine Jtable auslesen
Von Hasba im Forum JavaAntworten: 15Letzter Beitrag: 27.09.07, 15:04 -
JTable: eine Zeile bold geschrieben anzeigen lassen
Von ayten im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 5Letzter Beitrag: 20.06.07, 16:42 -
Bild Über eine Tabellenrand anzeigen
Von MrFreeze im Forum HTML & XHTMLAntworten: 3Letzter Beitrag: 10.08.06, 12:53



2Danke

Zitieren

Login





