JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben

Gregorio

Mitglied
Hallo zusammen,

habe ein kleines Programm geschrieben daß Emails aus einer DB ausliest und in einer JTable ausgibt.
(Auf dem Bild sind die Daten in der Klasse hinterlegt um das anschaulicher zu machen)
Möchte beim auswählen einer Zeile daß das Program die Werte an einer neuen Klasse übergibt, zum beantworten der EMail.
Ich habe es soweit geschafft daß wenn ich eine Zeile anklicken das neue Fenster sich öffnet und die Daten der empfangene
Email schon mal reinkopiert werden, wie kriege ich das hin daß diese Daten an den Button oben links zum Antworten kopiert werden
und danach das neue Fenster zum Antworten geöffnet wird?

Vielen Dank im voraus.

Layout.JPG

[CODE lang="java" title="TableJFrame"]package test.email;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.mail.Message;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class TableJFrame extends JFrame {
private static final long serialVersionUID = 1L;

private JScrollPane scrollPane;
private MeineAktionen antwortenAct;

private JTable tabelle;

{
// Set Look & Feel
try {
javax.swing.UIManager
.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
}


//eine innere Klasse für die Aktionen
class MeineAktionen extends AbstractAction {
//automatisch über Eclipse ergänzt
private static final long serialVersionUID = 8673560298548765044L;

//der Konstruktor
public MeineAktionen(String text, ImageIcon icon, String beschreibung, KeyStroke shortcut, String actionText) {
//den Konstruktor der Übergeordneten Klasse mit dem Text und dem Icon aufrufen
super(text, icon);
//die Beschreibung setzen für den Bildschirmtipp
putValue(SHORT_DESCRIPTION, beschreibung);
//den Shortcut
putValue(ACCELERATOR_KEY, shortcut);
//das ActionCommand
putValue(ACTION_COMMAND_KEY, actionText);
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("antworten"))
antworten();
}
}

private void antworten() {

}

public static void main(String[] args) {
TableJFrame inst = new TableJFrame();
inst.setVisible(true);
}

public TableJFrame() {
super();
setTitle("E-Mail senden");
//wir nehmen ein Border-Layout
setLayout(new BorderLayout());

//die Aktionen erstellen
antwortenAct = new MeineAktionen("Neue E-Mail",
new ImageIcon("icons/mail-generic.gif"),
"Erstellt eine neue E-Mail",
null,
"antworten");
//die Symbolleiste oben einfügen
add(symbolleiste(), BorderLayout.NORTH);
setVisible(true);
setSize(700, 300);
// setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
initGUI();
}


//die Symbolleiste erzeugen und zurückgeben
private JToolBar symbolleiste() {
JToolBar leiste = new JToolBar();
//die Symbole über die Aktionen einbauen
leiste.add(antwortenAct);

//die Leiste zurückgeben
return (leiste);
}

private void initGUI() {
try {
getContentPane().setLayout(null);

setVisible(true);
setSize(700, 300);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
scrollPane = new JScrollPane();
getContentPane().add(scrollPane);
// scrollPane.setBounds(7, 7, 693, 301);
scrollPane.setBounds(7, 40, 693, 301);
{
TableModel tabelleModel = new DefaultTableModel(
new String[][] {
{ "bot@aol.com", "markus.braun@domain.com", "Unser Termin...", "Lorem ipsum dolor sit amet," },
{ "bot@aol.com", "johannes.weiss@domain.com", "Unser Termin...", "Lorem ipsum dolor sit amet," },
{ "bot@aol.com", "cornelia.schwarz@domain.com", "Unser Termin...", "Lorem ipsum dolor sit amet," } },
new String[] { "absender", "empfaenger", "betreff", "Inhalt" });
tabelle = new JTable();
scrollPane.setViewportView(tabelle);
tabelle.setModel(tabelleModel);
}
}


pack();
//einen Maus-Listener ergänzen
tabelle.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
//war es ein Doppelklick?
if (e.getClickCount() == 1) {
//die Zeile beschaffen
int zeile = tabelle.getSelectedRow();
//die Daten beschaffen
String absender, empfaenger, betreff, inhalt;
absender = tabelle.getModel().getValueAt(zeile, 0).toString();
empfaenger = tabelle.getModel().getValueAt(zeile, 1).toString();
betreff = tabelle.getModel().getValueAt(zeile, 2).toString();
inhalt = tabelle.getModel().getValueAt(zeile, 3).toString();
//und anzeigen
//Übergeben wird der Frame der äußeren Klasse
new Antworten_2(TableJFrame.this, true, absender, empfaenger, betreff, inhalt);
}
}

});

this.setSize(713, 339);

} catch (Exception e) {
e.printStackTrace();
}
}

}[/CODE]
[CODE lang="java" title="Antworten_2"]package test.email;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class Antworten_2 extends JDialog{
//automatisch über Eclipse erzeugt
private static final long serialVersionUID = -5496318621928815910L;

//für die Eingabefelder
private JTextField absender, empfaenger, betreff;
private JTextArea inhalt;

//für die Schaltflächen
private JButton ok, abbrechen;

//die innere Klasse für den ActionListener
class NeuListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//wurde auf OK geklickt?
if (e.getActionCommand().equals("senden"))
//dann die Daten übernehmen
senden();
//wurde auf Abbrechen geklickt?
if (e.getActionCommand().equals("abbrechen"))
//dann Dialog schließen
dispose();
}
}

//der Konstruktor
public Antworten_2(JFrame parent, boolean modal, String absender, String empfaenger, String betreff, String inhalt) {
super(parent, modal);
setTitle("Neue Nachricht / Antwort");
//die Oberfläche erstellen
initGui(absender, empfaenger, betreff, inhalt);

//Standardoperation setzen
//hier den Dialog ausblenden und löschen
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}


private void initGui(String absender2, String empfaenger2, String betreff2, String inhalt2) {
setLayout(new BorderLayout());
JPanel oben = new JPanel();
oben.setLayout(new GridLayout(0, 2));
oben.add(new JLabel("Absender:"));
absender = new JTextField(absender2);
oben.add(absender);
oben.add(new JLabel("Empfänger:"));
empfaenger = new JTextField(empfaenger2);
oben.add(empfaenger);
oben.add(new JLabel("Betreff:"));
betreff = new JTextField(betreff2);
oben.add(betreff);
add(oben, BorderLayout.NORTH);
inhalt = new JTextArea(inhalt2);
//den Zeilenumbruch aktivieren
inhalt.setLineWrap(true);
inhalt.setWrapStyleWord(true);
//das Feld setzen wir in ein Scrollpane
JScrollPane scroll = new JScrollPane(inhalt);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
add(scroll);

JPanel unten = new JPanel();
//die Schaltflächen
ok = new JButton("Senden");
ok.setActionCommand("senden");
abbrechen = new JButton("Abbrechen");
abbrechen.setActionCommand("abbrechen");

NeuListener listener = new NeuListener();
ok.addActionListener(listener);
abbrechen.addActionListener(listener);

unten.add(ok);
unten.add(abbrechen);
add(unten, BorderLayout.SOUTH);

//anzeigen
setSize(600, 300);
setVisible(true);
}

//die Methode verschickt die Nachricht
private void senden() {
//für die Sitzung
Session sitzung;

//die Verbindung herstellen
sitzung = verbindungHerstellen();
//die Nachricht verschicken und speichern
nachrichtVerschicken(sitzung);
nachrichtSpeichern();
}

private Session verbindungHerstellen() {
//die Zugangsdaten
//Sie müssen sie an Ihr Konto anpassen
String benutzername = "****";
String kennwort = "****";

//der Server
String server = "smtp.gmail.com";

//die Eigenschaften setzen
Properties eigenschaften = new Properties();
//die Authentifizierung über TLS
eigenschaften.put("mail.smtp.auth", "true");
eigenschaften.put("mail.smtp.starttls.enable", "true");
//der Server
eigenschaften.put("mail.smtp.host", server);
//der Port zum Versenden
eigenschaften.put("mail.smtp.port", "587");

// das Session-Objekt erstellen
Session sitzung = Session.getInstance(eigenschaften, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(benutzername, kennwort);
}
});

return sitzung;
}

private void nachrichtVerschicken(Session sitzung) {
//der Absender
String absender = "";

try {
//eine neue Nachricht vom Typ MimeMessage erzeugen
MimeMessage nachricht = new MimeMessage(sitzung);
//den Absender setzen
nachricht.setFrom(new InternetAddress(absender));
//den Empfänger
nachricht.setRecipients(Message.RecipientType.TO, InternetAddress.parse(empfaenger.getText()));
//den Betreff
nachricht.setSubject(betreff.getText());
//und den Text
nachricht.setText(inhalt.getText());
//die Nachricht verschicken
Transport.send(nachricht);

JOptionPane.showMessageDialog(this, "Die Nachricht wurde verschickt.");

//den Dialog schließen
dispose();
}
catch (MessagingException e) {
JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
}
}

private void nachrichtSpeichern() {
//für die Verbindung
Connection verbindung;

//die Datenbank öffnen
verbindung=MiniDBTools.oeffnenDB("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:mailDB");
try {
//einen Eintrag in der Tabelle empfangen anlegen
//über ein vorbereitetes Statement
PreparedStatement prepState;
prepState = verbindung.prepareStatement("insert into gesendet (empfaenger, betreff, inhalt) values (?,?,?)");
prepState.setString(1, empfaenger.getText());
prepState.setString(2, betreff.getText());
prepState.setString(3, inhalt.getText());
//das Statement ausführen
prepState.executeUpdate();
verbindung.commit();

//Verbindung schließen
prepState.close();
verbindung.close();
//und die Datenbank schließen
MiniDBTools.schliessenDB("jdbc:derby:");
}
catch (Exception e) {
JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
}
}
}
[/CODE]
 

Gregorio

Mitglied
Vielen Dank für die Rückmeldung,

habe gegoogelt und versucht es zu verstehen, es ist noch zu hoch für mich, bin nicht so lange mit Java unterwegs.
Hast du bitte mal einen kleinen Code für mich wo ich mir vorstellen kann wie ich es zu machen hab?
 

mihe7

Top Contributor
Im Wesentlichen geht es darum, Daten und Darstellung zu trennen. Damit bekmmst Du strukturierteren Code. Habe aber Deine Frage nochmal gelesen: Du brauchst nur den Code, der sich in den Zeilen 134 bis 144 befindet in eine Methode auslagern und diese Methode kannst Du doch von der Action des Buttons aus auch aufrufen (Zeile 63, vermutlich).

Zum Thema MVC läuft übrigens gerade ein Thread https://www.java-forum.org/thema/model-view-controller.191849/
 
Zuletzt bearbeitet:

Gregorio

Mitglied
Vielen Dank für alles,

ja, den Thread habe ich mir durchgelesen und werde es in meinen Projekten in der Form auch künftig benutzen.
Dein Tipp war Goldwert, ich hatte dabei nen Denkfehler und habe die komplette Methode in die neue methode antworten() reinkopiert und es funktionierte nicht, erst nach deiner Antwort kopierte ich nur den benötigten Code rein und seihe da, es funktionierte alles ohne Probleme.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2
L Neue Zeile JTable Java Basics - Anfänger-Themen 13
E Nächste freie Zeile in jTable ansprechen Java Basics - Anfänger-Themen 5
G jtable listener wenn zeile markiert wird Java Basics - Anfänger-Themen 6
G JTable aus Hibernate Zeile löschen Java Basics - Anfänger-Themen 4
T Text einer JTable-Zeile farblich ändern Java Basics - Anfänger-Themen 16
G jtable, zeile automatisch hinzufügen Java Basics - Anfänger-Themen 3
S JTable: Wie kann ich die Werte aus der selektierten Zeile au Java Basics - Anfänger-Themen 11
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
richis-fragen JTable sowohl Spaltennamen wie auch Spaltenbeschriftungen Java Basics - Anfänger-Themen 7
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
E JTable einzelne Zelle färben Java Basics - Anfänger-Themen 2
thobren jtable arraylist Java Basics - Anfänger-Themen 12
thobren JTable Icon Java Basics - Anfänger-Themen 1
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
J JTable Spalteninhalt löschen Java Basics - Anfänger-Themen 1
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
B jTable Spalte summieren Java Basics - Anfänger-Themen 7
N JTable auslesen Java Basics - Anfänger-Themen 6
O JTable in Excel mit Farben Java Basics - Anfänger-Themen 8
O Kommentar auf JTable Zelle Java Basics - Anfänger-Themen 2
M Jtable Reenderer Java Basics - Anfänger-Themen 0
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6
M Jtable änderung updaten Java Basics - Anfänger-Themen 2
O JTable Suchfunktion Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Klasse in JTable einfügen Java Basics - Anfänger-Themen 7
S JTable Java Basics - Anfänger-Themen 16
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L JTable Tagebuch Spaltenhöhe verändern Java Basics - Anfänger-Themen 3
S JTable - Filter an anderen Colums Java Basics - Anfänger-Themen 2
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
A zykl. Aktualisierne JTable Java Basics - Anfänger-Themen 9
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
C Klassen JTable wird ohne Header aufgebaut Java Basics - Anfänger-Themen 6
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2
B Kniffel JTable Java Basics - Anfänger-Themen 5
N JTable flackert Java Basics - Anfänger-Themen 8
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
J Eintragen von Personen in JTable Java Basics - Anfänger-Themen 4
X JTable mit grünen und roten Punkten Java Basics - Anfänger-Themen 2
LexeB4F DEL --> JTable Zelleninhalt Java Basics - Anfänger-Themen 3
R JTable Auslesen Java Basics - Anfänger-Themen 1
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
J JTable Wert gleich überschreiben Java Basics - Anfänger-Themen 6
S JTable clonen Java Basics - Anfänger-Themen 5
H Best Practice PDF JTable Java Basics - Anfänger-Themen 4
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M JTable mit XML datei befüllen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
M [JTable] getValue throws ArrayOutOfBoundException Java Basics - Anfänger-Themen 1
B JTable - Highlighter ??? Java Basics - Anfänger-Themen 3
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
O JScrollPane zu gross für JTable Java Basics - Anfänger-Themen 2
L JTable Row selected -> fireTableDataChange do nothing. Java Basics - Anfänger-Themen 3
E JTable + TableModel updaten? Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
F JTable adding Row Java Basics - Anfänger-Themen 5
P jTable getColumnClass, mit unterschiedlichen Klassen in einer Column? Java Basics - Anfänger-Themen 5
M Eingabe in JTable bei Eingabe korrigieren Java Basics - Anfänger-Themen 2
Z jtable problem (das tausendste??) Java Basics - Anfänger-Themen 12
J JTable Java Basics - Anfänger-Themen 7
T JTable Java Basics - Anfänger-Themen 2
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
F Methoden JTable + 2 For-Schleifen Java Basics - Anfänger-Themen 4
C jtextfield und jtable Java Basics - Anfänger-Themen 34
X JTable mit Inhalten aus JTextField o.ä. füllen Java Basics - Anfänger-Themen 4
G JTable: SelectionListener Problem Java Basics - Anfänger-Themen 2
G JTable: Werte in Tabelle direkt ansprechen Java Basics - Anfänger-Themen 3
S Icons in JTable per ResultSet Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben