Hallo Freunde der Sonne.
Wir haben eine Hausaufgabe auf, in der wir unter anderem ein grafisches Programm mit folgender Funktion erstellen sollten. Es handelt sich um eine Liste, zu der wir Elemente hinzufügen und alle Elemente der Liste entfernen können sollen. Eigentlich sollten wir das ganze in JavaFX machen, es wurde uns aber freigestellt, dass auch in Swing zutun. Für die nachfolgenden Aufgaben der Hausaufgabe, so musste ich feststellen, werden allerdings Elemente benötigt, die sich mit Swing nur umständlich realisieren lassen, weswegen ich nun auch JavaFX verwenden werde.
Ich stehe nicht so auf LayoutManager, und bastele mir durch intensiven Gebrauch der setBounds()-Methode meist ein eigenes Layout. Ja, ich weiß, das ist schlechter Programmierstil. Aber mir geht es jetzt um folgendes: Ich habe festgestellt, dass JavaFX doch teilweise sehr von AWT/Swing abweicht, und das es bspw. die setBounds()-Methode nicht gibt. Auch ist im Gegensatz zu AWT/Swing eine Layoutkomponente in JavaFX gleichzeitig ein Container, was die ganze Sache wahrscheinlich noch komplizierter macht. Mich würde deswegen interessieren, wie man, so wie beim Programm weiter unten, sich sein eigenes Layout zusammenbasteln kann.
Natürlich "verlange" ich keine Neuimplementation, ich möchte nur wissen, welche Methoden zum ungefähr selben Ergebnis führen, um den Rest kümmere ich mich dann.
Ich wäre sehr erfreut über Antworten!
ListFrame.java (package main)
AddListener.java (package main.event)
DeleteListener.java (package main.event)
Wir haben eine Hausaufgabe auf, in der wir unter anderem ein grafisches Programm mit folgender Funktion erstellen sollten. Es handelt sich um eine Liste, zu der wir Elemente hinzufügen und alle Elemente der Liste entfernen können sollen. Eigentlich sollten wir das ganze in JavaFX machen, es wurde uns aber freigestellt, dass auch in Swing zutun. Für die nachfolgenden Aufgaben der Hausaufgabe, so musste ich feststellen, werden allerdings Elemente benötigt, die sich mit Swing nur umständlich realisieren lassen, weswegen ich nun auch JavaFX verwenden werde.
Ich stehe nicht so auf LayoutManager, und bastele mir durch intensiven Gebrauch der setBounds()-Methode meist ein eigenes Layout. Ja, ich weiß, das ist schlechter Programmierstil. Aber mir geht es jetzt um folgendes: Ich habe festgestellt, dass JavaFX doch teilweise sehr von AWT/Swing abweicht, und das es bspw. die setBounds()-Methode nicht gibt. Auch ist im Gegensatz zu AWT/Swing eine Layoutkomponente in JavaFX gleichzeitig ein Container, was die ganze Sache wahrscheinlich noch komplizierter macht. Mich würde deswegen interessieren, wie man, so wie beim Programm weiter unten, sich sein eigenes Layout zusammenbasteln kann.
Natürlich "verlange" ich keine Neuimplementation, ich möchte nur wissen, welche Methoden zum ungefähr selben Ergebnis führen, um den Rest kümmere ich mich dann.
Ich wäre sehr erfreut über Antworten!
ListFrame.java (package main)
Code:
package main;
import main.event.AddListener;
import main.event.DeleteListener;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JList;
import javax.swing.DefaultListModel;
import javax.swing.ListSelectionModel;
import javax.swing.JScrollPane;
public class ListFrame extends JFrame {
private Container container;
public ListFrame() {
// Liste erzeugen
DefaultListModel<String> listModel = new DefaultListModel<>();
String[] data = {"eins", "zwei", "drei", "vier"};
for (int i = 0; i < data.length; i++) {
listModel.add(i, data[i]);
}
JList<String> list = new JList<>(listModel);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrollPane = new JScrollPane(list);
scrollPane.setBounds(10, 10, 330, 100);
// Löschknopf
JButton deleteButton = new JButton("Delete");
deleteButton.addActionListener(new DeleteListener(listModel));
deleteButton.setBounds(350, 10, 100, 30);
// Eingabefeld
JTextField textField = new JTextField();
textField.setBounds(10, 120, 200, 30);
// Hinzufügeknopf
JButton inputButton = new JButton("Input");
inputButton.addActionListener(new AddListener(textField, listModel));
inputButton.setBounds(220, 120, 120, 30);
// Basiscontainer ansprechen und alle Elemente hinzufügen
container = getContentPane();
container.setLayout(null);
container.add(scrollPane);
container.add(deleteButton);
container.add(textField);
container.add(inputButton);
}
public static void main(String[] args) {
ListFrame frame = new ListFrame();
frame.setTitle("List");
frame.setSize(460, 190);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
AddListener.java (package main.event)
Code:
package main.event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
import javax.swing.DefaultListModel;
public class AddListener implements ActionListener {
private JTextField textField;
private DefaultListModel<String> listModel;
public AddListener(JTextField textField, DefaultListModel<String> listModel) {
this.textField = textField;
this.listModel = listModel;
}
@Override
public void actionPerformed(ActionEvent event) {
int lastIndex = listModel.getSize();
listModel.add(lastIndex, textField.getText());
textField.setText(new String());
}
}
Code:
package main.event;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.DefaultListModel;
public class DeleteListener implements ActionListener {
private DefaultListModel listModel;
public DeleteListener(DefaultListModel<String> listModel) {
this.listModel = listModel;
}
@Override
public void actionPerformed(ActionEvent event) {
listModel.removeAllElements();
}
}