Kommunikation zwischen zwei Fenstern und vorübergehende Speicherung der Eingaben

Belushi

Mitglied
Ich möchte gern eine Auswahl von Objekten dem Benutzer zur Verfügung stellen, die er durch eine ComboBox auswählen kann (oberer Bereich im Bild, Objects). Nach der Auswahl öffnet sich ein für das ausgewählte Objekt ein spezifisches Fenster mit GUI-Komponenten, um Objekteigenschaften einzustellen (unterer Bereich, Objectproperties).

Bspw. wählt der Benutzer ein Object aus, öffnet sich ein anderes Fenster in dem er die Eigenschaften festlegen kann kann. Diese Eigenschaften sollten zur Laufzeit gespeichert werden und bei gewollten nachträglichen Änderungen müssen die vorher bestimmten Werte wieder geladen werden, damit der Benutzer nicht irritiert wird.

Szenario:

Der Benutzer wählt als erstes ein ObjectA aus der Auswahlliste
Das Programm öffnet ein Objectpropertiesfenster für das ObjectA
Der Benutzer gibt den Wert für die Eigenschaft gleich 5 ein und bestätigt seine Eingabe

Der Benutzer wählt als zweites ein ObjectB aus der Auswahlliste
Das Programm öffnet ein Objectpropertiesfenster für das ObjectB
Der Benutzer gibt die Werte im Objectpropertiesfenster ein und bestätigt seine Eingabe

Der Benutzer wählt als drittes ein ObjectC aus der Auswahlliste
Das Programm öffnet ein Objectpropertiesfenster für das ObjectC
Der Benutzer gibt Werte ein und bestätigt seine Eingabe

Der Benutzer öffnet erneut die ComboBox von ObjectA, um seine Einstellungen zu ändern.
Das Programm öffnet das Filtereigenschaftsfenster mit den vorher definierten Eingaben
Der Benutzer ändert die Filtergröße von dem Wert 5 auf den Wert 2 und bestätigt seine Eingabe



Meine Fragen:

Frage I: Ist die ComboBox eine gute Lösung für die Auswahl der verschiedenen Objekte oder gibt es eine andere UI-Komponenet, die dafür besser geeignet sind? Ich denke, dass es kein Problem sein sollte, wenn ein Object aus der ComboBox ausgewählt ist, das dafür festgelegte Operatorpropertiefenster in seinen Bereich zu zeichen. Allerdings wie sieht es aus, wenn schon vorher Eingaben stattfanden? Wird das Fenster neu gezeichnet und anschließend nachgeschaut, ob Werte dafür zwischengespeichert sind, um diese später in das Fenster zu laden?

Frage II: Wie mache ich das mit dem Zwischenspeichern? Die Objects in eine Collection und bei Gebrauch von schon vorher definierten Objects immer in die GUI laden?

Das wären meine Fragen und Lösungsansätze. Ich würde gern ein paar Vorschlage von euch hören, was die übliche herangehensweise ist um ein solches Problem zu lösen. Code poste ich später nach.

Im Anhang findet ihr ein Beispiel der GUI:
 

Anhänge

  • GUI.png
    GUI.png
    18,2 KB · Aufrufe: 56

tribalup

Bekanntes Mitglied
Hiho,

Ich denke deine GUI wird schnell an ihre Grenzen stoßen wenn du mehr als 5 Objekte benötigst.

Frage: Sind die Optionen für jedes Objekt dieselben?

Wenn ja dann bau dir nen Dialog mit den Optionen und öffne diesen dann wenn ein Objekt initialisiert, oder erneut ausgewählt wird(dafür vielleicht einen Button "Properties", da es sonst nervig wird wenn man ma nicht gleich das Objekt der Begierde trifft).

Zu 2. Ich würde die Objekte in einer Collection speichern(Generic?) und die Optionen in den Objekten natürlich.
 

tagedieb

Top Contributor
Wie du es dar stellst musst du entscheiden. Solange es benutzerfreundlich bleibt.
Ich stell mir das vor wie der klassische PropertyEditor wie man ihn aus Eclipse oder Netbeans kennt.

Ich nehme an du willst die Objekte persistent speichern in einem File oder Datenbank.

Wenn das Object angezeigt werden soll wird es geladen, beim Bestätigen wird es gespeichert und beim schließen (falls es das gibt, löschst du die Refenz und der GC räumt es auf)

Soll immer nur ein oder mehre PropertyEditor Fenster geöffnet werden können? Wenn du nur eins anzeigen willst kannst du eigentlich nur das Model(Objekt) austauschen aber die GUI Komponente bleibt dieselbe.
 

TiGreen

Mitglied
So hier habe ich mal einen Code zurecht geschrieben ;) Kannst ja reingucken, wenn du nicht mehr weiterkommst :D

Du könntest noch hinzufügen, dass er die Objekt-Eigenschaften in eine Datei schreibt und wieder beim richtigen Zeitpunkt einliest.
Aber wenn die Speicherung der Objekte nur während der Laufzeit sein soll, reicht das hier vollkommen aus.

EDIT: Wozu Methoden? Copy&Paste geht genau so schnell :lol:

Java:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;



public class ObjektSpeicherung extends JFrame implements ActionListener {
    
    private Container c;
    private TitledBorder Border1, Border2;
    
    // ComboBox
    private JComboBox combobox;
    private String[] objekte = { "Objekt 1", "Objekt 2", "Objekt 3", "Objekt 4" };
    
    // Für jedes "String[] objekte" ein Objekt
    private Objekte Objekt1, Objekt2, Objekt3, Objekt4;
    
    private int selected = -1;
    
    private JButton properties;
    private JCheckBox checkbox, checkbox2;
    private JLabel label;
    private JTextField text;
    
    // Standard-Werte
    private static boolean wert_checkbox = false;
    private static boolean wert_checkbox2 = false;
    private static String wert_text = "";
    
    
    
    public ObjektSpeicherung() {
    JFrame fenster = new JFrame("WindowName");
    fenster.setDefaultCloseOperation(EXIT_ON_CLOSE);
    
    c = fenster.getContentPane();
    c.setLayout(new BorderLayout());
   
    // Oberer Teil des Fensters 
    combobox = new JComboBox(objekte);
    combobox.addActionListener(this);
    combobox.setSelectedIndex(0);
    c.add(combobox, BorderLayout.NORTH);
    
    Border1 = new TitledBorder("Objects");
    Border1.setTitleFont(new Font(Font.DIALOG, Font.PLAIN, 14));
    Border1.setTitleColor(Color.blue);
    combobox.setBorder(Border1);
    
    
    // Unterer Teil des Fensters 
    
    properties = new JButton("Confirm");
    properties.addActionListener(this);
    properties.setBounds(120,300,100,30);
    
    checkbox = new JCheckBox("Option_a");
    checkbox.setBounds(20, 30, 100, 20);
    
    checkbox2 = new JCheckBox("Option_b");
    checkbox2.setBounds(20, 55, 100, 20);
    
    
    label = new JLabel("property_size");
    label.setBounds(25,90,100,20);
    text = new JTextField();
    text.setBounds(25, 115, 190,23);
    text.addKeyListener(new KeyAdapter() {
                public void keyTyped(KeyEvent e) {
                  char c = e.getKeyChar();
                  
                  // Nur Zahleneingabe erlauben und nur ein Komma
                  if (!((Character.isDigit(c) ||
                     (c == KeyEvent.VK_BACK_SPACE) ||
                     (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_COMMA)))) {
                       getToolkit().beep();
                       e.consume();
                  } else if (c == KeyEvent.VK_COMMA) {
                      if (text.getText().indexOf(",") != -1) {
                        getToolkit().beep();
                        e.consume();       
                       } 
                  }
                  
                }
              });
    
    
   
    
    
    Border2 = new TitledBorder("Properties");
    Border2.setTitleFont(new Font(Font.DIALOG, Font.PLAIN, 14));
    Border2.setTitleColor(Color.blue);
    
    
    
    
    JPanel unten = new JPanel();
    unten.setLayout(null);
    unten.add(checkbox);
    unten.add(checkbox2);
    unten.add(label);
    unten.add(text);
    unten.add(properties); 
    unten.setBorder(Border2);
    c.add(unten, BorderLayout.CENTER);
         
    
    
    fenster.setSize(250,425);
    fenster.setLocationRelativeTo(null);
    fenster.setResizable(false);
    fenster.setVisible(true);
    
    
    }
    
    public void actionPerformed(ActionEvent e) {
        
    Object action = e.getSource();
    
    if (action == combobox){
        
        if(combobox.getSelectedIndex() != selected) {
        System.out.println("Selected: " + (combobox.getSelectedIndex()+1));
        
        if((combobox.getSelectedIndex() + 1) == 1) {
            if (Objekt1 != null) {
                checkbox.setSelected(Objekt1.getOption_a());
                checkbox2.setSelected(Objekt1.getOption_b());
                text.setText("" + Objekt1.getProperty_size());
            } else {
                
                if(checkbox != null && checkbox2 != null && text != null ) {
                checkbox.setSelected(wert_checkbox);
                checkbox2.setSelected(wert_checkbox2);
                text.setText(wert_text);
                }
              
            }
        } 
        if((combobox.getSelectedIndex() + 1) == 2) {
            if (Objekt2 != null) {
                checkbox.setSelected(Objekt2.getOption_a());
                checkbox2.setSelected(Objekt2.getOption_b());
                text.setText("" + Objekt2.getProperty_size());
            } else {
                
                if(checkbox != null && checkbox2 != null && text != null ) {
                checkbox.setSelected(wert_checkbox);
                checkbox2.setSelected(wert_checkbox2);
                text.setText(wert_text);
                }
              
            }
        } 
        if((combobox.getSelectedIndex() + 1) == 3) {
            if (Objekt3 != null) {
                checkbox.setSelected(Objekt3.getOption_a());
                checkbox2.setSelected(Objekt3.getOption_b());
                text.setText("" + Objekt3.getProperty_size());
            } else {
                
                if(checkbox != null && checkbox2 != null && text != null ) {
                checkbox.setSelected(wert_checkbox);
                checkbox2.setSelected(wert_checkbox2);
                text.setText(wert_text);
                }
              
            }
        } 
        if((combobox.getSelectedIndex() + 1) == 4) {
            if (Objekt4 != null) {
                checkbox.setSelected(Objekt4.getOption_a());
                checkbox2.setSelected(Objekt4.getOption_b());
                text.setText("" + Objekt4.getProperty_size());
            } else {
                
                if(checkbox != null && checkbox2 != null && text != null ) {
                checkbox.setSelected(wert_checkbox);
                checkbox2.setSelected(wert_checkbox2);
                text.setText(wert_text);
                }
              
            }
        } 
        
        selected = (combobox.getSelectedIndex());
        
        }
    }
    if (action == properties) {
        String Item = combobox.getSelectedItem().toString();
        if(combobox.getSelectedItem().toString() == objekte[0]) {
           // System.out.println("Obejekt 1");
            if( Objekt1 == null){
            Objekt1 = new Objekte();
            }
            Objekt1.aendereOption_a(checkbox.isSelected());
            Objekt1.aendereOption_b(checkbox2.isSelected());
            Objekt1.aendereProperty_size( Double.valueOf(text.getText().replace(',', '.')).doubleValue());
            Objekt1.getInfo();
        }
        if(combobox.getSelectedItem().toString() == objekte[1]) {
            //System.out.println("Obejekt 2");
            if( Objekt2 == null){
            Objekt2 = new Objekte();
            }
            
            Objekt2.aendereOption_a(checkbox.isSelected());
            Objekt2.aendereOption_b(checkbox2.isSelected());
            Objekt2.aendereProperty_size( Double.valueOf(text.getText().replace(',', '.')).doubleValue());
            Objekt2.getInfo();
        }
        if(combobox.getSelectedItem().toString() == objekte[2]) {
            //System.out.println("Obejekt 3");
            if( Objekt3 == null){
            Objekt3 = new Objekte();
            }
            
            Objekt3.aendereOption_a(checkbox.isSelected());
            Objekt3.aendereOption_b(checkbox2.isSelected());
            Objekt3.aendereProperty_size( Double.valueOf(text.getText().replace(',', '.')).doubleValue());
            Objekt3.getInfo();
        }
        if(combobox.getSelectedItem().toString() == objekte[3]) {
           // System.out.println("Obejekt 4");
            if( Objekt4 == null){
            Objekt4 = new Objekte();
            }
            
            Objekt4.aendereOption_a(checkbox.isSelected());
            Objekt4.aendereOption_b(checkbox2.isSelected());
            Objekt4.aendereProperty_size( Double.valueOf(text.getText().replace(',', '.')).doubleValue());
            Objekt4.getInfo();
        }
        
    }
    }
    
    
    
    private class Objekte {
    // Eigenschaften der Objekte mit deren Standardwerten
    private boolean Option_a = false;
    private boolean Option_b = false;
    private double  property_size = 0;
    
    
    // Setter-Methoden 
    public void aendereOption_a(boolean zustand) {
    Option_a = zustand;    
    }
    public void aendereOption_b(boolean zustand) {
    Option_b = zustand;    
    }
    public void aendereProperty_size(double size) {
    property_size = size;    
    }    
    
    // Getter-Methoden
    public boolean getOption_a() {
        return Option_a;
    }
    public boolean getOption_b() {
        return Option_b;
    }
    public double getProperty_size() {
        return property_size;
    }
    
    
    
    public void getInfo() {
        System.out.println("Option_a: " + checkbox.isSelected() + "\n" +
                           "Option_b: " + checkbox2.isSelected() + "\n" + 
                           "property_size: " + property_size);
    }       
        
}
    public static void main(String[] args) {
        new ObjektSpeicherung();
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Kommunikation zwischen zwei Stages AWT, Swing, JavaFX & SWT 0
D Swing Kommunikation zwischen zwei GUI's AWT, Swing, JavaFX & SWT 2
T Kommunikation zwischen Zwei GUI-Klassen AWT, Swing, JavaFX & SWT 2
T Kommunikation zwischen zwei jFrames AWT, Swing, JavaFX & SWT 4
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
R Swing Kommunikation zwischen Panels AWT, Swing, JavaFX & SWT 2
L Swing Kommunikation zwischen JMenuBar und anderen Componenten AWT, Swing, JavaFX & SWT 2
J Programmierstil: Kommunikation Listener und GUI AWT, Swing, JavaFX & SWT 3
F Event Handling Kommunikation eines JButton ueber JPanels hinaus AWT, Swing, JavaFX & SWT 6
B 2 Klassen Kommunikation AWT, Swing, JavaFX & SWT 4
J Applet Kommunikation unter Applets AWT, Swing, JavaFX & SWT 2
C Kommunikation SWING - Algorithmus AWT, Swing, JavaFX & SWT 4
M JavaFX Abstand zwischen AnchorPane und Labels in dem HBox halten AWT, Swing, JavaFX & SWT 1
U 2dgraphics unterschied zwischen .scale und AffineTransform.getScaleInstance AWT, Swing, JavaFX & SWT 4
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
missy72 JavaFX TableView Spalte zwischen den Zeilen AWT, Swing, JavaFX & SWT 5
Z Swing Kann man denn abstand zwischen zwei Buttons berechnen AWT, Swing, JavaFX & SWT 5
T JavaFX - Datenübergabe zwischen Scenes AWT, Swing, JavaFX & SWT 8
S JavaFX Unterschiede zwischen Scene Builder 2.0 und der ausgeführten App AWT, Swing, JavaFX & SWT 17
Informatiknoob AWT Zahlenraten (eine Zahl zwischen 1 und 10) AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
ralfb1105 JavaFX Daten zwischen Controller "austauschen" AWT, Swing, JavaFX & SWT 65
L Wörter zwischen zwei Grenzen einlesen. AWT, Swing, JavaFX & SWT 13
P Zwischen verschiedenen Panels wechseln AWT, Swing, JavaFX & SWT 3
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
O Focus zwischen Chat und Spiel wechselns AWT, Swing, JavaFX & SWT 3
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Arif AWT Unterschied zwischen RED und red AWT, Swing, JavaFX & SWT 4
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
D Zwischen Null-Layouts wechseln AWT, Swing, JavaFX & SWT 2
K Wie kann ich eine Variable zwischen Tab Klassen weitergeben ? AWT, Swing, JavaFX & SWT 7
S JavaFX (Best Practise) Daten zwischen Controllern austauschen AWT, Swing, JavaFX & SWT 1
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
B Vertikale Größenänderung zwischen zwei Widgets AWT, Swing, JavaFX & SWT 2
T Swing Kompatibilitätsproblem zwischen Swing und JavaFX AWT, Swing, JavaFX & SWT 4
S Verzögerung zwischen Cursorbewegung einbauen AWT, Swing, JavaFX & SWT 1
3 Swing Vertikaler Separator zwischen JMenu's AWT, Swing, JavaFX & SWT 2
D JGridLayout zwischen Zeilen bestimmter Abstand AWT, Swing, JavaFX & SWT 3
S Unterschied zwischen id und fx:id AWT, Swing, JavaFX & SWT 5
F Swing JAVA GUI Übergabe von Werten zwischen mehreren Fenstern/Klassen AWT, Swing, JavaFX & SWT 10
B Datenübergabe zwischen Tabs und Daten speichern AWT, Swing, JavaFX & SWT 2
B Linie zwischen 2 Elementen AWT, Swing, JavaFX & SWT 5
D animierte kameraansicht zwischen gezeichneten objekten AWT, Swing, JavaFX & SWT 4
B Swing JMenu zwischen anderen Componenten AWT, Swing, JavaFX & SWT 4
F Swing Ladebildschirm zwischen zwei SWING Frames AWT, Swing, JavaFX & SWT 11
T JTabbedPane - neuen Tab zwischen zwei anderen Tabs hinzufügen AWT, Swing, JavaFX & SWT 2
GUI-Programmer JWindow zwischen den Desktopbild und Dektopverknüpfungen AWT, Swing, JavaFX & SWT 16
Psypsy Swing SwingWorker unterschied zwischen setProgress und process AWT, Swing, JavaFX & SWT 2
propra Schnittpunkt zwischen Objekt und Kante finden AWT, Swing, JavaFX & SWT 24
H Swing Wechsel zwischen Frames AWT, Swing, JavaFX & SWT 6
S Swing Zwischenräume zwischen JPanels AWT, Swing, JavaFX & SWT 4
A Daten umherschieben zwischen zwei Klassen AWT, Swing, JavaFX & SWT 40
X zwischen 2 JPanels "elegant" wechseln AWT, Swing, JavaFX & SWT 3
B LayoutManager Positionierung zwischen zwei Layoutkomponenten AWT, Swing, JavaFX & SWT 2
N Swing DnD zwischen zwei JTrees AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
D JTabel: Überschrift, Abstand zwischen Tabellen, Spalten-Farbe ändern AWT, Swing, JavaFX & SWT 2
G Swing MigLayout: Lücken zwischen Elementen entfernen AWT, Swing, JavaFX & SWT 2
F Variablen zwischen Frames AWT, Swing, JavaFX & SWT 5
V Swing JLabel zwischen 2 JPanel hin- und herbewegen. AWT, Swing, JavaFX & SWT 12
E Drag&Drop zwischen 2 Listen AWT, Swing, JavaFX & SWT 5
M SWT DND zwischen zwei TreViewern in beide Richtungen AWT, Swing, JavaFX & SWT 10
buntuswalus Swing Datentransfer zwischen JPanels AWT, Swing, JavaFX & SWT 18
P Swing Beziehungen zwischen 3 Klassen AWT, Swing, JavaFX & SWT 4
S Schnittstelle zwischen Haupt und Nebenfenster AWT, Swing, JavaFX & SWT 17
algorismi Unterscheiden zwischen zwei JLists AWT, Swing, JavaFX & SWT 5
F JCombobox zwischen setEditable true und false switchen AWT, Swing, JavaFX & SWT 2
I Swing JPanel Tab zwischen GUI Elementen AWT, Swing, JavaFX & SWT 6
data89 Verbindungslinien zwischen Formen auf einer "Zeichenfläche" AWT, Swing, JavaFX & SWT 2
DeeDee0815 SWT Text Widget: Zwischen Single und Password umschalten AWT, Swing, JavaFX & SWT 3
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
G Variblenwert zwischen zwei Klassen übergeben AWT, Swing, JavaFX & SWT 3
G Gap zwischen JButton-Rand und JButton-Icon verändern AWT, Swing, JavaFX & SWT 2
T GridLayout, zu wenig Platz zwischen Widgets AWT, Swing, JavaFX & SWT 3
S Abstand zwischen Labeln auf 0 setzen AWT, Swing, JavaFX & SWT 6
J Unterschied zwischen nicht-statischen und statischen Klassen AWT, Swing, JavaFX & SWT 5
G Datenaustausch zwischen zwei JFrames AWT, Swing, JavaFX & SWT 3
O Zwischen mehreren Bildern wechseln AWT, Swing, JavaFX & SWT 6
T JTextField, der nur Werte zwischen 100 und 1000 zulässt AWT, Swing, JavaFX & SWT 28
M Linie zwischen JComponents AWT, Swing, JavaFX & SWT 5
G Abstand zwischen den Buttons in einer Toolbar AWT, Swing, JavaFX & SWT 3
G Drag&Drop zwischen JTables AWT, Swing, JavaFX & SWT 2
P Unterscheiden zwischen Mautasten-Druck? AWT, Swing, JavaFX & SWT 3
B Abstand zwischen einzelnen Elementen einstellen AWT, Swing, JavaFX & SWT 2
I Drag and Drop zwischen zwei JTables AWT, Swing, JavaFX & SWT 5
N JTable Abstand zwischen einzelnen Spalten AWT, Swing, JavaFX & SWT 6
K JFreeChart: Platz zwischen Balken AWT, Swing, JavaFX & SWT 3
G Zwischen Panels in einem JFrame wechseln AWT, Swing, JavaFX & SWT 4
M Unterschied zwischen paintComponent() und paint()? AWT, Swing, JavaFX & SWT 4
R Navigieren zwischen mehreren Fenstern AWT, Swing, JavaFX & SWT 7
F Wie gebe ich Parameter zwischen Actions weiter? AWT, Swing, JavaFX & SWT 2
K abstände zwischen Panels? AWT, Swing, JavaFX & SWT 3
M Freiraum zwischen Knoten im JTree AWT, Swing, JavaFX & SWT 14
M Parameterübergabe zwischen Frames AWT, Swing, JavaFX & SWT 2
P in JFrame zwischen verschiedenen JPanels wechseln AWT, Swing, JavaFX & SWT 7
M Breite veraendern zwischen 2 JPanels AWT, Swing, JavaFX & SWT 2
J Separator zwischen den einzelnen Symbolen in der Toolbar AWT, Swing, JavaFX & SWT 4
A Button zwischen zwei Panels verschieben. AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben