package ToDo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JViewport;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.Border;
import javax.swing.plaf.TextUI;
/**
* Source Code für AP Aufgabe vom 12/10/2018
* ToDo Liste
* @author fschwarz
*/
@SuppressWarnings("serial")
public class ToDoListEntry extends JFrame{
public static void main(String[] args) {
new ToDoListEntry();
}
private final JTextField input;
private final JTextField entryInput;
private final DefaultListModel<String> listModel;
private final DefaultListModel<String> listEntry; // String => Integer to complete my Code
private final JList<String> listM;
private final JList<String> listE; // String => Integer to complete my Code
private static boolean isInt;
public ToDoListEntry() {
/**
* Konstruktor setzt den Titel von dem JFrame automatisch mit also anstatt:
* <code>
* super();
*
* setTitle("Title");
* </code>
*/
super("ToDo List");
/**
* Container der JFrame:
* hier werden später alle anderen komonenten hinzugefügt
*/
final Container container = getContentPane();
container.setLayout(new BorderLayout());
/**
* Alle UI komponenten iniziallisiert
*/
input = new JTextField();
entryInput = new JTextField();
listModel = new DefaultListModel<>();
listEntry = new DefaultListModel<>();
listM = new JList<>(listModel);
listE = new JList<>(listEntry);
// Die JScrollPane nimmt eine Componente als parameter, dieser wird dann innerhalb dargestellt: JList
final JButton add = new JButton("add");
final JButton remove = new JButton("remove");
final JButton removeAll = new JButton("remove all");
final JButton exit = new JButton("exit");
// Dieses JPanel wird die Buttons halten
final JPanel buttons = new JPanel();
// Dieses JPanel wird das ScrollPanel behandeln
JPanel scroll = new JPanel();
final JScrollPane scrollPane = new JScrollPane(scroll);
scroll.add(listM);
scroll.add(listE);
// Designs the ScrollPane
scroll.setBackground(Color.WHITE);
DefaultListCellRenderer rendererModel = (DefaultListCellRenderer) listM.getCellRenderer();
rendererModel.setHorizontalAlignment(JLabel.LEFT);
DefaultListCellRenderer rendererEntry = (DefaultListCellRenderer) listE.getCellRenderer();
rendererEntry.setHorizontalAlignment(JLabel.RIGHT);
// Diese JPanel wird die Input Felder halten
final JPanel inputs = new JPanel();
// Inputs dem JPanel hinzufügen
inputs.add(input);
inputs.add(entryInput);
// GridLayout für die Inputs
inputs.setLayout(new GridLayout(0, 2));
// GridLayout für die Buttons, damit alle gleich groß sind
buttons.setLayout(new GridLayout(0, 1));
// Buttons dem JPanel hinzufügen
buttons.add(add);
buttons.add(remove);
buttons.add(removeAll);
buttons.add(exit);
// Die Buttons rechts am Container hinzufügen
container.add(buttons, BorderLayout.EAST);
// Das Input Feld oben am Container hinzufügen
container.add(inputs, BorderLayout.NORTH);
// Die Liste mittig am Container hinzufügen
container.add(scrollPane, BorderLayout.CENTER);
// Windows Adapter hinzufügen, um Application richtig zu beenden wenn x gedruckt wird
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
exit();
}
});
// Einen KeyListener zum JTextField hinzufügen um Key Press abzufragen
input.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
add();
}
}
});
entryInput.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
add();
}
}
});
add.addActionListener(e -> isNumeric(entryInput.getText()));
// Wenn der "add" Butten gedrückt wurde, füge Text dem ListModel hinzu
add.addActionListener(e -> add());
// Wenn der "remove" Button gedrückt wurde, entferne alle selektierten Elemente
remove.addActionListener(e -> remove());
// Wenn der "remove all" Button gedrückt wurde, entferne alle Elemente des ListModels
removeAll.addActionListener(e -> listModel.removeAllElements());
removeAll.addActionListener(e -> listEntry.removeAllElements());
// Wenn der "exit" Button gedrückt wurde, beende die Application
exit.addActionListener(e -> exit());
/**
* Setzt die größe des JFrame in Pixel
* Vorsicht: Container ist kleiner als die defeinierten Dimensionen
* Da hier padding mit einberechnet ist
*/
setSize(400, 250);
/**
* Setzt JFrame in das Center des primären Bildschirms
*/
setLocationRelativeTo(null);
/**
* Macht das JFrame sichtbar
*/
setVisible(true);
}
/**
* Beendet die Application
*/
private void exit() {
System.exit(0);
}
private static boolean isNumeric(String value) {
try {
System.out.println(value);
Integer.parseInt(value);
return isInt = true;
}
catch (NumberFormatException e){
return isInt = false;
}
// if ( value instanceof Integer) {
// return isInt = true;
// }
// else {
// System.out.println("Im 2. Inputfeld wurde kein Integer eingetragen");
// return isInt = false;
// }
}
/**
* fügt den Text des JTextFields zum ListModel hinzu
*/
private void add() {
//Stellt sicher dass der Input nicht null oder empty ist
listModel.addElement(input.getText());
// Setzt das JTextField auf einen leeren wert
input.setText("");
// Setzt den Cursor im JTextField (optional)
input.requestFocus();
String intInput = entryInput.getText();
if (isInt) {
listEntry.addElement(intInput);
System.out.println(intInput);
entryInput.setText("");
entryInput.requestFocus();
}
else {
return;
}
}
/**
* Entfernt eins oder mehrere selektierte Elemente
*/
private void remove() {
// Speichert alle selektierten Elemente Index in einem Array
int[] selectedValuesM = listM.getSelectedIndices();
int[] selectedValuesE = listE.getSelectedIndices();
// Wenn kein Element selektiert ist, mach nichts!
if (selectedValuesM.length < 1 || selectedValuesE.length < 1) {
return;
}
else {
// Enternt die Elemente aus dem ListModel
listModel.remove(selectedValuesM[0]);
listEntry.remove(selectedValuesE[0]);
// Wiederhole remove() für die restlichen Elemente
remove();
}
}
}