2022-01-16 23:01:18 +01:00
|
|
|
import javax.swing.*;
|
|
|
|
import javax.swing.border.BevelBorder;
|
|
|
|
import javax.swing.border.EtchedBorder;
|
|
|
|
import javax.swing.event.ListSelectionEvent;
|
|
|
|
import javax.swing.event.ListSelectionListener;
|
|
|
|
import javax.swing.table.AbstractTableModel;
|
|
|
|
import java.awt.BorderLayout;
|
|
|
|
import java.awt.Color;
|
|
|
|
import java.awt.Dimension;
|
|
|
|
import java.awt.FlowLayout;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import java.awt.event.ActionListener;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
public class MyMailGUI extends JFrame implements ActionListener, ListSelectionListener {
|
|
|
|
|
|
|
|
private MyMail app;
|
|
|
|
|
|
|
|
private java.util.List<Mail> mails = new ArrayList<>(20);
|
|
|
|
|
|
|
|
private JPanel jpStatus, jpSidebar, jpMain;
|
|
|
|
|
|
|
|
private JLabel jlStatusText;
|
|
|
|
|
2022-01-31 13:00:00 +01:00
|
|
|
private JButton jbReload, jbDelete, jbNew, jbReply, jbSettings, jbSwitchUser;
|
2022-01-16 23:01:18 +01:00
|
|
|
|
|
|
|
private JTable jtMaillist;
|
|
|
|
|
|
|
|
private JTextArea jtaMailtext;
|
|
|
|
|
|
|
|
public MyMailGUI( MyMail pClientApp ) {
|
|
|
|
super("MyMail: POP3 Client");
|
|
|
|
app = pClientApp;
|
|
|
|
|
|
|
|
createComponents();
|
|
|
|
|
|
|
|
// Methoden der Klasse JFrame
|
|
|
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
|
|
setSize(800, 600);
|
|
|
|
setLocationRelativeTo(null);
|
|
|
|
setVisible(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setStatus( String pStatusText ) {
|
|
|
|
jlStatusText.setText(pStatusText);
|
|
|
|
jlStatusText.setIcon(loadImageIcon("information.png"));
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setError( String pStatusText ) {
|
|
|
|
jlStatusText.setText(pStatusText);
|
|
|
|
jlStatusText.setIcon(loadImageIcon("error.png"));
|
|
|
|
}
|
|
|
|
|
|
|
|
public void clearAllMails() {
|
|
|
|
mails.clear();
|
|
|
|
updateMailList();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void removeMailFromList( Mail pMail ) {
|
|
|
|
if( pMail != null ) {
|
|
|
|
mails.remove(pMail);
|
|
|
|
updateMailList();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void addMailToList( Mail pNewMail ) {
|
|
|
|
if( pNewMail != null ) {
|
|
|
|
mails.add(pNewMail);
|
|
|
|
updateMailList();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void addMailsToList( Mail[] pNewMails ) {
|
|
|
|
for( int i = 0; i < pNewMails.length; i++ ) {
|
|
|
|
if( pNewMails[i] != null ) {
|
|
|
|
mails.add(pNewMails[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
updateMailList();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void addMailsToList( List<Mail> pNewMails ) {
|
|
|
|
pNewMails.toFirst();
|
|
|
|
while( pNewMails.hasAccess() ) {
|
|
|
|
if( pNewMails.getContent() != null ) {
|
|
|
|
mails.add(pNewMails.getContent());
|
|
|
|
}
|
|
|
|
pNewMails.next();
|
|
|
|
}
|
|
|
|
updateMailList();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void updateMailList() {
|
|
|
|
((MailTableModel) jtMaillist.getModel()).fireTableDataChanged();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void actionPerformed( ActionEvent e ) {
|
|
|
|
if( e.getActionCommand().equals("load") ) {
|
|
|
|
app.getAllMails();
|
|
|
|
} else if( e.getActionCommand().equals("delete") ) {
|
2022-01-27 17:43:24 +01:00
|
|
|
app.deleteMail(mails.get(jtMaillist.getSelectedRow()));
|
2022-01-31 13:00:00 +01:00
|
|
|
} else if (e.getActionCommand().equals("switchUser")) {
|
|
|
|
app.switchUser();
|
|
|
|
dispose();
|
2022-01-16 23:01:18 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void valueChanged( ListSelectionEvent e ) {
|
|
|
|
int selectedRow = jtMaillist.getSelectedRow();
|
|
|
|
if( selectedRow >= 0 && selectedRow < mails.size() ) {
|
|
|
|
Mail selectedMail = mails.get(jtMaillist.getSelectedRow());
|
|
|
|
jtaMailtext.setText(selectedMail.getText());
|
|
|
|
jbDelete.setEnabled(true);
|
|
|
|
} else {
|
|
|
|
jtaMailtext.setText("Wähle oben ein Mail aus ..");
|
|
|
|
jbDelete.setEnabled(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void createComponents() {
|
|
|
|
jpStatus = new JPanel();
|
|
|
|
jpStatus.setLayout(new FlowLayout(FlowLayout.LEADING));
|
|
|
|
jpStatus.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
|
|
|
|
this.add(jpStatus, BorderLayout.SOUTH);
|
|
|
|
|
|
|
|
jlStatusText = new JLabel("Starte App..");
|
|
|
|
jpStatus.add(jlStatusText);
|
|
|
|
|
|
|
|
jpSidebar = new JPanel();
|
|
|
|
jpSidebar.setLayout(new FlowLayout(FlowLayout.CENTER));
|
|
|
|
jpSidebar.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
|
|
|
|
jpSidebar.setBackground(Color.DARK_GRAY);
|
|
|
|
jpSidebar.setPreferredSize(new Dimension(160, 600));
|
|
|
|
this.add(jpSidebar, BorderLayout.WEST);
|
|
|
|
|
|
|
|
jbReload = new JButton("Neu laden");
|
|
|
|
jbReload.setActionCommand("load");
|
|
|
|
jbReload.addActionListener(this);
|
|
|
|
jbReload.setIcon(loadImageIcon("arrow_refresh.png"));
|
|
|
|
jpSidebar.add(jbReload);
|
|
|
|
|
|
|
|
jbDelete = new JButton("Löschen");
|
|
|
|
jbDelete.setEnabled(false);
|
|
|
|
jbDelete.setActionCommand("delete");
|
|
|
|
jbDelete.addActionListener(this);
|
|
|
|
jbDelete.setIcon(loadImageIcon("email_delete.png"));
|
|
|
|
jpSidebar.add(jbDelete);
|
2022-01-31 13:00:00 +01:00
|
|
|
|
|
|
|
jbSwitchUser = new JButton("Abmelden");
|
|
|
|
jbSwitchUser.setActionCommand("switchUser");
|
|
|
|
jbSwitchUser.addActionListener(this);
|
|
|
|
jpSidebar.add(jbSwitchUser);
|
2022-01-16 23:01:18 +01:00
|
|
|
|
|
|
|
jbSettings = new JButton("Einstellungen");
|
|
|
|
jbSettings.setActionCommand("settings");
|
|
|
|
jbSettings.addActionListener(this);
|
|
|
|
jbSettings.setIcon(loadImageIcon("setting.png"));
|
|
|
|
//jpSidebar.add(jbSettings);
|
|
|
|
|
|
|
|
jpMain = new JPanel();
|
|
|
|
jpMain.setLayout(new BorderLayout());
|
|
|
|
this.add(jpMain, BorderLayout.CENTER);
|
|
|
|
|
|
|
|
jtMaillist = new JTable(new MailTableModel());
|
|
|
|
jtMaillist.setShowGrid(true);
|
|
|
|
jtMaillist.setFillsViewportHeight(true);
|
|
|
|
jtMaillist.setCellSelectionEnabled(false);
|
|
|
|
jtMaillist.setColumnSelectionAllowed(false);
|
|
|
|
jtMaillist.setRowSelectionAllowed(true);
|
|
|
|
jtMaillist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
|
|
jtMaillist.setShowHorizontalLines(true);
|
|
|
|
jtMaillist.getSelectionModel().addListSelectionListener(this);
|
|
|
|
jtMaillist.getColumnModel().getColumn(0).setPreferredWidth(200);
|
|
|
|
jtMaillist.getColumnModel().getColumn(1).setPreferredWidth(200);
|
|
|
|
jtMaillist.getColumnModel().getColumn(2).setPreferredWidth(400);
|
|
|
|
|
|
|
|
JScrollPane spMaillistContainer = new JScrollPane(jtMaillist);
|
|
|
|
spMaillistContainer.setPreferredSize(new Dimension(640, 200));
|
|
|
|
jpMain.add(spMaillistContainer, BorderLayout.NORTH);
|
|
|
|
|
|
|
|
jtaMailtext = new JTextArea();
|
|
|
|
jtaMailtext.setEditable(false);
|
|
|
|
jtaMailtext.setLineWrap(true);
|
|
|
|
jtaMailtext.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
|
|
|
|
jtaMailtext.setText("Wähle oben ein Mail aus ..");
|
|
|
|
|
|
|
|
JScrollPane spMailtextContainer = new JScrollPane(jtaMailtext);
|
|
|
|
spMailtextContainer.setPreferredSize(new Dimension(640, 400));
|
|
|
|
spMailtextContainer.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
|
|
|
jpMain.add(spMailtextContainer, BorderLayout.CENTER);
|
|
|
|
|
|
|
|
this.pack();
|
|
|
|
}
|
|
|
|
|
|
|
|
private Icon loadImageIcon( String pImageName ) {
|
|
|
|
return new ImageIcon(MyMailGUI.class.getResource("images/" + pImageName));
|
|
|
|
}
|
|
|
|
|
|
|
|
class MailTableModel extends AbstractTableModel {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getColumnName( int columnIndex ) {
|
|
|
|
switch( columnIndex ) {
|
|
|
|
case 0:
|
|
|
|
return "Datum";
|
|
|
|
case 1:
|
|
|
|
return "Absender";
|
|
|
|
case 2:
|
|
|
|
return "Betreff";
|
|
|
|
default:
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
@Override
|
|
|
|
public Class<?> getColumnClass( int columnIndex ) {
|
|
|
|
switch( columnIndex ) {
|
|
|
|
case 0:
|
|
|
|
return Date.class;
|
|
|
|
default:
|
|
|
|
return String.class;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getRowCount() {
|
|
|
|
return mails.size();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getColumnCount() {
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Object getValueAt( int rowIndex, int columnIndex ) {
|
|
|
|
if( rowIndex < mails.size() ) {
|
|
|
|
switch( columnIndex ) {
|
|
|
|
case 0:
|
|
|
|
return mails.get(rowIndex).getDate();
|
|
|
|
case 1:
|
|
|
|
return mails.get(rowIndex).getSender();
|
|
|
|
case 2:
|
|
|
|
return mails.get(rowIndex).getSubject();
|
|
|
|
default:
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|