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.
[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]
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.
[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]