JTable, DefaultTableModel, zwei Zahlen multiplizieren.

IlikeJava

Mitglied
Hallo,

ich (Java-Anfänger) möchte JTable benutzen, um zwei Zahlen (als zwei Zellen ) zu multiplizieren und das Resultat in einer anderen Zelle auszugeben, indem ich auf den Button "calc" klicke.
Mein Programm liefert jeoch errors. Warum?

[CODE lang="java" title="Multiplikation"]import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Multiplication{
public static void main( String[] args ){

String[] titles = new String[]{ "Number1", "Number2", "Result"};

final DefaultTableModel model = new DefaultTableModel( titles, 1 );


JTable table = new JTable( model );


final JButton calc = new JButton( "calc" );








JFrame frame = new JFrame( "Multiplication" );

Container content = frame.getContentPane();

content.add( new JScrollPane( table ), BorderLayout.CENTER );
content.add( calc, BorderLayout.NORTH );


frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.pack();
frame.setVisible( true );

calc.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e) {
int a=(Integer) model.getValueAt( 0, 0);
int b =(Integer) model.getValueAt( 0, 1);
int c=a*b;
table.setValueAt(c, 0, 2);



}
});

}
}







[/CODE]
 
Zuletzt bearbeitet:

fhoffmann

Top Contributor
Du solltest uns auch mitteilen, was für einen Error du bekommst, nämlich
Code:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
Du kannst nicht einfach einen String zu einem int (oder Integer) casten, wie du es versuchst in
Java:
int a=(Integer)model.getValueAt( 0, 0);
Du musst sattdessen Integer.parseInt(String s) aufrufen.
 

IlikeJava

Mitglied
Ich bekomme nur errors, wenn ich auf button "calc" klicke, sonst keine.


Die errors sind (den von dir angegebenen error finde ich dort nicht):

xception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Multiplication$1.actionPerformed(Multiplication.java:47)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 

IlikeJava

Mitglied
Ich führe das Programm aus. Dann erscheint das Fenster "Multiplication" und in der Konsole wird
null
null

angezeigt.
Dann gebe ich im Fenster zwei Zahlen per Tastatur ein und klicke auf "calc" , wonach die errors erscheinen.
 

fhoffmann

Top Contributor
Wann gibst du die Werte aus?
Du sollst schreiben:
Java:
        calc.addActionListener( new ActionListener(){
            public void actionPerformed(ActionEvent e) {
               System.out.println(model.getValueAt(0, 0));
               System.out.println(model.getValueAt(0, 1));
 

fhoffmann

Top Contributor
Dann scheint doch meine erste Vermutung richtig zu sein, dass du nicht auf Integer casten solltest, sondern parseInt() aufrufenn solltest.
 

fhoffmann

Top Contributor
Es ist tatsächlich vom Typ String; probiere doch einmal:
Java:
int a = Integer.parseInt((String)model.getValueAt(0, 0));
 

fhoffmann

Top Contributor
Sehr schön!

Nun hast du nur noch das Problem, dass du damit umgehen musst, dass der Benutzer deines Programms falsche (oder keine) Eingaben macht.
Und die Frage ist auch, ob du wirklich eine Tabelle mit nur einer Zeile für die Eingaben und die Ausgabe nutzen willst (eine Tabelle mit nur einer Zeile ist eigentlich sinnlos).

EDIT: Oder noch allgemeiner gesagt: Am besten trennst du die "Oberfläche" von der "Logik". Auch wenn die "Logik" hier nur daraus besteht, zwei Zahlen miteinander zu multiplizieren, gehört sie eigentlich nicht in die "Oberfläche".
 
Zuletzt bearbeitet:

IlikeJava

Mitglied
Eigentlich möchte ich ein komplexeres Programm schreiben. Jedoch , solange man keine einfache Programme schreiben kann, wird es wahrscheinlich mit komplexeren schwierig...
Das "Multiplikation"-Programm ist quasi ein Testprogramm für mich, ob ich mit den Begriffen JTable, DefaultTableModel schon auf einer einfacheren Ebene umgehen kann.
 

fhoffmann

Top Contributor
Dann ist doch der nächste Schritt, eine Klasse "Multiplikation" zu schreiben, die die "komplizierte Logik" ausführt.
Und es ist die Frage, an welcher Stelle man Fehleingaben des Benutzers abfangen will (der Benutzer gibt nicht "3" sondern "xyz" in ein Tabellenfeld ein).
 

IlikeJava

Mitglied
Ich möchte eigentlich eine Art Astrologie-Programm schreiben, was kaum etwas nur mit Multiplikation zu tun hat :) (Jedoch , es werden dort schon mathematische Rechenoperationen wie +, -,*,/ stattfinden) .
Dabei möchte ich JTable benutzen.
Die Tabelle besteht aus 6 Spalten und unbestimmter Anzahl von Zeilen (d.h die Anzahl von Zeilen hängt davon ab, wieviele Planeten ich aufnehmen möchte).
In den ersten 5 Spalten wird Input stehen und in der 6 Spalte Output.
Nachdem man Input eingegeben hat, sollte per Klick auf ein Button die 6 Spalte Output (für jede Zeile) liefern.

Das Prinzip vom "Multiplikationsprogramm" ist dasselbe: Man hat Input , Output und ein Button.


Klar ist, daß man Falscheingaben berücksichtigen soll. Das wäre dann das nächste Level der Implementierung .
Ich gehe erstmal davon aus, daß keine falschen Angaben passieren werden, um das ganze Problem zuerst mal einfacher zu halten.
 
Zuletzt bearbeitet:

IlikeJava

Mitglied
Hallo,
Screenshot (22).png
ich habe in der Zeit das Programm schon geschrieben. Nun möchte ich eine Ergänzung zum Programm schreiben (Die Ergänzung besteht aus der Möglichkeit per Klick auf Button, Bild zu öffnen).

Konkret geht es um folgendes Problem(siehe Bild) : Die letzte Spalte besteht aus JButtons.
Ich mache Input in die ersten 4 Spalten.
In der 5 Spalte werden dann, nach dem Drücken von "calculate"-Button (ganz unten), Zahlen erscheinen .
Nun , abhängig davon, was in der jeweiligen Zeile bzgl. der 4 und 5 Spalte steht, soll der JButton in der jeweiligen Zeile (und 6 Spalte) per actionListener etwas "machen" . Genauer: wenn z.B in der Zeile 1 , Spalte 4 und 5 zwei Zahlen 11 und 5 stehen, dann soll der JButton in Zeile 1 und Spalte 6 folgendes machen: Beim Klick darauf öffnet sich ein neues Fenster mit einem Bild Namens " 11,5" .

Mir ist aber nicht klar, wie ich auf ein bestimmtes JButton zugreifen kann.
 
Zuletzt bearbeitet:

IlikeJava

Mitglied
Ich habe es nicht verstanden, wie dort auf Buttons zugegriffen wird. Über e.getSource und e.getActionCommand?

Nebenbei habe ich mir überlegt, Buttons außerhalb von jtable zu platzieren, dann wäre Zugriff einfacher.
Jedoch , ich würde versuchen , es innerhalb von JTable zu machen.
 

Oneixee5

Top Contributor
Wozu sind die Buttons überhaupt nützlich? Wenn in eine Zelle etwas eingegeben wurde, dann kann der neue Wert doch auch sofort errechnet und in einer anderen Zelle angezeigt werden. Ein Button ist dafür nicht notwendig.
 

IlikeJava

Mitglied
Ich habe geschrieben, daß per Button ein Bild in einem neuen Fenster geöffnet werden soll. Es gibt 360 Bilder, und es wird dasjenige Bild geöffnet, das den errechneten Werten entspricht.
 

Neumi5694

Top Contributor
Ich würde EINEN Button außerhalb der Tabelle erstellen, der dann auf die markierte Zeile zugreift.
Buttons in den Zeilen sind ziemlich mühsam.

Erstelle auf keinen Fall einen eigenen eigenen JButton pro Zeile, der Button darf nicht Teil der Daten sein.

Was du brauchst, ist erst mal ein CellRenderer, der dir einen Button anzeigt (dieser hat keine Logik, wird nur für die grafische Darstellung des Buttons verwendet)
Jetzt gibt's verschiedene Varianten, wie du auf Eingabe reagierst.
In einem MouseListener könntest du z.B. auswerten, ob auf eine Spalte mit einem Button geklickt wurde und dann dein Bild für die entsprechende Zeile anzeigen lassen.
Eine Alternative wäre ein TableCellEditor für diese Spalte, der dann bei Aktivierung das Bild anzeigen lässt.

Im schlimmsten Fall hast du 2 Button-Objekte (es geht auch mit einem), egal wie viele Zeilen deine Tabelle hat.
 

IlikeJava

Mitglied
Ich dachte, wenn man es mit den Buttons außerhalb der Tabelle macht , dann wird es ähnlich dem Button "calculate" ( der auch außerhalb von der Tabelle platziert ist). Beim "calculate" habe ich keine Renderer oder Editoren gebraucht.
Ich dachte eigentlich an folgende Implementierung von den Buttons :
Jedem Button füge ich ActionListener hinzu und in der actionPerformedMethode würde ( für den Fall bzgl. erster Zeile) stehen: model.getValueAt(0,3) und model.getValueAt(0,4).Und die beiden Werte würden die Stelle im Array ( Inhalt vom Array sind die Bilder) liefern, wo das gewünschte Bild abgespeichert ist.
Ich muss nur wissen welcher Button zu welcher Zeile gehört. Man könnte z.B die Buttons nummerieren und die Zeilen auch.
Zumindest hört sich es für mich ziemlich einfach an (ist aber wahrscheinlich nicht so qualitativ/bequem/effizient).

Aber du meinst wahrscheinlich, ich soll nicht zuviele Buttons machen. Ich wollte eigentlich ca. 20 Stück machen. Ist nicht schön, aber endlich soll das Ding funktionieren ! :)

Ich habe nicht verstanden, wie du es mit nur einem Button meinst: "... ob auf eine Spalte mit einem Button geklickt wurde..."
 
Zuletzt bearbeitet:

Neumi5694

Top Contributor
Richtig, wenn der Button sich nicht in der Tabelle befindet, sparst du dir das alles.

Kompliziert wird's erst, wenn sich die Buttons in der Tabelle befinden sollen. Wenn du fix 20 haben willst, dann musst du ja auch fix 20 Datensätze haben, hier fängt's schon an.

Jeder Tabellen-Event innerhalb der Tabelle weiß, welche Zeile und welche Spalte betroffen ist, da musst du nichts durchnumerieren.
Für einen Mausklick-Event gibt's Methoden, um anhand der Koordinaten auf der Tabelle bestimmen zu lassen, auf welche Zeile/Spalte geklickt wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
H JTable - DefaultTableModel vs AbstractTableModel AWT, Swing, JavaFX & SWT 5
J JTable DefaultTableModel - Änderungen feststellen AWT, Swing, JavaFX & SWT 8
J Swing JTable - Konflikt DefaultTableModel+DefaultTableColumnModel AWT, Swing, JavaFX & SWT 7
calzone Swing JTable/DefaultTableModel, rowData auslesen ? AWT, Swing, JavaFX & SWT 15
T Von JTable auf DefaultTableModel AWT, Swing, JavaFX & SWT 2
T JTable und DefaultTableModel AWT, Swing, JavaFX & SWT 4
M Problem mit JTable und DefaultTableModel AWT, Swing, JavaFX & SWT 2
L JTable (DefaultTableModel) nach Spalte sortieren-TableSorter AWT, Swing, JavaFX & SWT 2
A JTable Änderungen anzeigen (DefaultTableModel) AWT, Swing, JavaFX & SWT 5
G JTable/DefaultTableModel zur Seite scollen AWT, Swing, JavaFX & SWT 3
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
S Swing Deselektion in JTable verhindern AWT, Swing, JavaFX & SWT 0
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
Ananaskirsche Swing jTable Reihen zuviel eingefügt AWT, Swing, JavaFX & SWT 12
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4
K Swing JTable updaten AWT, Swing, JavaFX & SWT 9
thet1983 Swing MySQL >> JTable AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben