Feste Positionen und Größen in JavaFX

Henry939

Aktives Mitglied
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)
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());
    }
}
DeleteListener.java (package main.event)
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();
    }
}
 

Robat

Top Contributor
[...] was die ganze Sache wahrscheinlich noch komplizierter macht.
Würde ich nicht behaupten. Mit JavaFX geht das mEn sogar einfacher...

Java:
public class Main extends Application {

    @Override
    public void start( Stage primaryStage ) {
        VBox root = new VBox();
        HBox controlBox = new HBox();

        ListView<String> list = new ListView<>();

        ObservableList<String> items = FXCollections.observableArrayList();
        list.setItems(items);

        TextField input = new TextField();

        Button btnAdd = new Button("Hinzufügen");
        btnAdd.setOnMouseClicked(event -> {
            items.add(input.getText());
            input.clear();
        });

        Button btnDelete = new Button("Löschen");
        btnDelete.setOnMouseClicked(event -> items.clear());

        controlBox.getChildren().addAll(input, btnAdd, btnDelete);
        root.getChildren().addAll(list, controlBox);

        primaryStage.setTitle("Foobar");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main( String[] args ) {
        launch(args);
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U feste Größe für den Zeichenbereich eines JFrames AWT, Swing, JavaFX & SWT 4
Ollek JTextArea - Feste Zeilenanzahl(8 Zeilen) AWT, Swing, JavaFX & SWT 3
F Im BorderLayout eine feste Grösse zuweisen! AWT, Swing, JavaFX & SWT 9
S Feste Position einer Komponente auf Glasspane AWT, Swing, JavaFX & SWT 6
S JTable feste Zeilenanzahl?! AWT, Swing, JavaFX & SWT 4
S GridBagLayout - JTable zu groß - feste Zellengröße? AWT, Swing, JavaFX & SWT 2
T Feste Fenstergröße AWT, Swing, JavaFX & SWT 3
D JtoolBar feste Breite ? AWT, Swing, JavaFX & SWT 13
G JCombobox PopupMenu feste größe zuweisen AWT, Swing, JavaFX & SWT 3
G Feste Größe einer TextArea AWT, Swing, JavaFX & SWT 2
B Feste Breite einer JTextPane, die HTML anzeigt AWT, Swing, JavaFX & SWT 8
K BorderLayout--> feste Größe AWT, Swing, JavaFX & SWT 2
N Textfield feste größe? AWT, Swing, JavaFX & SWT 1
P JPanel im BorderLayout feste Größe/Position zuordnen AWT, Swing, JavaFX & SWT 3
T jTable Colum feste position AWT, Swing, JavaFX & SWT 3
S Feste Breite und Höhe für einen formatierten Text. AWT, Swing, JavaFX & SWT 5
S JOptionPane und eine feste Zeilenbreite. AWT, Swing, JavaFX & SWT 4
B feste Zellgröße AWT, Swing, JavaFX & SWT 2
P JPanel und Co. feste breiten AWT, Swing, JavaFX & SWT 4
K Layout-Frage: 3 Feste Tabellen, 6-10dynamische AWT, Swing, JavaFX & SWT 2
C JavaFX Positionen auf dem Bildschirm ermitteln AWT, Swing, JavaFX & SWT 1
T LayoutManager Größe + Positionen?! AWT, Swing, JavaFX & SWT 13
R Swing JLayeredPane - Drag&Drop Positionen vertauschen AWT, Swing, JavaFX & SWT 3
C SWT group Elemete mit unterschiedlichen Größen angeben AWT, Swing, JavaFX & SWT 6
F FormLayout Größen Problem AWT, Swing, JavaFX & SWT 2
S SWT Table Größen verändern AWT, Swing, JavaFX & SWT 10
L Swing Größen-Problem mit JFrame AWT, Swing, JavaFX & SWT 2
H Größen von JPanels,JLable und JTextfield.. AWT, Swing, JavaFX & SWT 12
J Textfelder in Applet übernehmen größen angabe nicht! AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben