Mehrer Fragen zu großem kompletten Swing Beispiel

Status
Nicht offen für weitere Antworten.
C

Carola

Gast
Hallo,

Ich muß meine Frage zu Swing nochmal etwas deutlicher stellen. Deswegen habe ich jetzt hier auch den kompletten Quelltext reingestellt.

Also: Ich hab mir nach langem Lesen eine Art Vorlage gebastelt, die ich öfters mal in ein paar Programmen verwenden will. Es ist eine Hauptklasse (SwingTemplate) die verschiedene Knöpfe hat, später vielleicht auch mal eine Menu-Bar.

Zur Zeit kann man mit den Knöpfen "Option" und "About" zwei Fenster öffnen. (Dies kommt später in die Menubar unter "Options" und "About".)

Das klappt auch soweit.

Der Code ist natürlich noch nicht ausgereift, es ist alles nur zu Testzwecken. Alle Buttons sind schief und krumm,
daran bitte nicht stören. Auch die Bezeichnungen sind nur ganz knapp und kurz gewählt.

Meine Fragen:

1) Ist das so wie ich es mit den Fenstern mache und der allgemeine Entwurf mit den Abfragen, der Knöpfe so "richtig" ? Stimmen auch die Aufrufe der Fenster ? Macht man das wirklcih so ?

2) Ich verstehe noch nicht ganz warum ich in der Klasse OptionWindows, beim Öffen des OptionWindows mit einem zweiten "this", die ganze Hauptklasse (SwingTemplate) mit übergeben muß. Bzw. ich verstehe es, wenn es richtig wäre, daß ich dann aus der Klasse OptionWindow Membervariablen von SwingTemplate verändern darf. Denn irgendwoher muß die SwingTemplate Klasse ja mitbekommen, wenn ich im OptionWindow Häckchen setze.
Wenn ich das weiter richtig verstehen, dann greife ich nicht direkt auf die Variablen von SwingTemplate zu, sondern verwende eine SETTER-Methode. Aber das muß ich natürlich dann in OptionWindows aufrufen, oder

Also konkret: s.seteineVariable("Neuer Text"); Doch leider klappt das so nicht. s.eineVariable = "NeuerText" klappt dagegen.

3) Wichtig Frage: Was mach ich wenn, ich ein Textfeld in der OptionWindows Klasse haben möchte.
Wenn ich das in OptionWindows definiere, wie kann ich dann die Eingabe zurückliefern ?
Oder definiere ich das Textfeld mit Namen textfeld in Swingtemplate und greife über s.textfeld aus der OptionWindowsklasse drauf zu ?

WICHTIG: Ihr braucht den Layoutmanager PAGELAYOUT falls ihr den Code ausführen wollt.
Code:
package de.proton.SwingTemplate;

import static pagelayout.EasyCell.center;
import static pagelayout.EasyCell.column;
import static pagelayout.EasyCell.hgap;
import static pagelayout.EasyCell.row;

import java.awt.Checkbox;
import java.awt.Color;
import java.awt.Container;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import pagelayout.Column;

public class SwingTemplate extends JFrame implements ActionListener
{        
    List listenfeld = new List(10, true);

    JButton p = new JButton("Knopf P");
    JButton s = new JButton("Knopf S");
    
    JButton options = new JButton("Options");
    JButton about = new JButton("About");

    String eineVariable="noch leer";
    
    public SwingTemplate()
    {       
        Container gcp = this.getContentPane();

        Column topLevel = column(listenfeld, row(center, center, p,s), 
                                      row(center, center, options,about)); 
                                                                           
        topLevel.createLayout(gcp);  
        options.addActionListener(this);
        about.addActionListener(this);        
    }

    // Set-Methode für eineVariable
    public void seteineVariable(String s)
    {
        eineVariable = s;
    }
    
    private static void createAndShowGUI()
    {
        JFrame frame = new SwingTemplate();        
        UIManager.put("swing.boldMetal", Boolean.FALSE);

        frame.setSize(1024, 700);
        frame.setVisible(true);
    }
    
    
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }

    // *** geforderte Methoden wegen "implements ActionListener"
    public void actionPerformed(ActionEvent event)
    {
        Object source = event.getSource();
        
        if (source == this.options)
        {            
            new OptionWindow(this, this);
        }
    
        if (source == this.about)
        {                        
            new AboutWindow(this);
        }
    
    }
}

package de.proton.SwingTemplate;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;

public class OptionWindow extends JDialog implements ActionListener
{
    private SwingTemplate s;
    private int state = 2;

    JCheckBox c1;
    JCheckBox c2;
    JCheckBox c3;
    JCheckBox c4;
    JCheckBox c5;
    JCheckBox c6;
    JTextField t6;

    JButton ok = new JButton("OK");

    OptionWindow(JFrame owner, SwingTemplate s)
    {
        super(owner, true);
        this.s = s;

        this.setTitle("Options");
        this.setSize(400, 400);
        this.setLocation(200, 200);
        this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        // this.setBounds(200,200,400,300);

        ok.addActionListener(this);

        JPanel toppanel = new JPanel();
        toppanel.setLayout(new BorderLayout());

        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        JPanel p3 = new JPanel();
        JPanel p4 = new JPanel();

        p1.setBackground(Color.LIGHT_GRAY);
        p2.setBackground(Color.LIGHT_GRAY);
        p3.setBackground(Color.LIGHT_GRAY);
        p4.setBackground(Color.LIGHT_GRAY);

        p1.setLayout(new GridLayout(6, 1));
        p2.setLayout(new GridLayout(1, 3));
        p3.setLayout(new GridLayout(1, 3));
        p4.setLayout(new GridLayout(1, 3));

        c1 = new JCheckBox("Beim Beenden Programm ohne Abfrage verlassen");
        c2 = new JCheckBox("Andere Einstellung setzen");
        c3 = new JCheckBox("Herunterfahren nach Messung");
        c4 = new JCheckBox("Noch eine Einstellung");
        c5 = new JCheckBox("Mehr Einstellungen");
        t6 = new JTextField("Eingabe:");
       
        p1.add(c1);
        p1.add(c2);
        p1.add(c3);
        p1.add(c4);
        p1.add(c5);
        p1.add(t6);

        JTabbedPane tbp = new JTabbedPane();
        tbp.setPreferredSize(new Dimension(300, 300));
        tbp.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);

        tbp.addTab("Allgemein", p1);
        tbp.addTab("Messung", p2);
        tbp.addTab("Sonstiges", p3);
        tbp.addTab("R4", p4);

        toppanel.add(tbp, BorderLayout.NORTH);
        toppanel.add(ok, BorderLayout.SOUTH);

        this.add(toppanel);
        this.setVisible(true);
    }

    public void actionPerformed(ActionEvent event)
    {
        Object source = event.getSource();

        if (source == this.c1)
        {
            s.eineVariable ="C1 betätigt";
        }
        
        if (source == this.ok)
        {
            this.dispose();
        }
    }
}

package de.proton.SwingTemplate;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class AboutWindow extends JDialog implements ActionListener
{

    JButton ok = new JButton("OK");

    AboutWindow(JFrame owner)
    {
        super(owner, true);
        this.setSize(200, 200);
        this.setLocation(300, 300);

        this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

        ok.addActionListener(this);

        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(5, 1));
        p1.setBackground(Color.GREEN);

        JLabel l1 = new JLabel("Beschriftung");
        JLabel l2 = new JLabel("Beschriftung");
        JLabel l3 = new JLabel("Beschriftung");
        JLabel l4 = new JLabel("Beschriftung");

        p1.add(l1);
        p1.add(l2);
        p1.add(l3);
        p1.add(l4);
        p1.add(ok);

        this.add(p1);
        this.setVisible(true);
    }

    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();
        if (source == this.ok)
        {
            this.dispose();
        }
    }

}
 

Templon

Bekanntes Mitglied
Zu 2.
>> Also konkret: s.seteineVariable("Neuer Text"); Doch leider klappt das so nicht. s.eineVariable = "NeuerText" klappt dagegen.

Zuerstmal würde ich deine Member private machen und dann über die Setter und Getter darauf zu greifen. Warum dein Setter nicht funktioniert, sehe ich gerade nicht.

Zu 3.
>> Oder definiere ich das Textfeld mit Namen textfeld in Swingtemplate und greife über s.textfeld aus der OptionWindowsklasse drauf zu ?

Ja so würde ich das machen (Also über den setter den neuen Wert setzen).

---

Code:
OptionWindow(JFrame owner, SwingTemplate s) 
    { 
        super(owner, true);

kannst du einfach durch:

Code:
OptionWindow(SwingTemplate s) 
    { 
        super(s, true);

ersetzen.
 
C

Carola

Gast
aber wenn ich das Textfeld in SwingTemplate definiere,

dann muß ich es ja auch in OptionWindow als graphisches Element setzen

mit

panel.add(s.textfield); bei standard Layoutmanager

Das erscheint mir etwas komisch...
 

Templon

Bekanntes Mitglied
Ah nein, da habe ich etwas falsch verstanden.

In deinem OptionWindow willst du ja irgendwelche Optionen für dein Programm setzen, also z.B. Hintergrundfarbe. Dann hast du in deinem SwingTemplate ein Member Color, und in dem OptionWindow liest du beim verlassen des Dialoges ein z.B. Textfeld aus und setzt dann den Member vom dem SwingTemplate darauf. EDIT: Oder du setzt dann halt gleich beim verlassen die Hintergrundfarbe des Frames auf die neue Farbe ^^

So habe ich mir das gedacht.
 
C

Carola

Gast
Ok, dass erscheint mir auch sinnvoller.

Das heißt ich definiere weiterhin alle grafischen Elemente, die ich in einem "Unterfenster" (Optionen, About usw.) brauche schon dort in der entsprechenden Klasse.

Aber die Ergebnisse, die die grafischen Elemente liefern "sichere" ich mir noch in der Unterklasse. z.B.

new JTextfield t = new Textfield("Eingabe");
s.eineMembervariable= t.getText();

oder mit Setter Methoden

s.setEineMembervariable(t.getText());

Kannst Du mir noch sagen, warum oben in meinem Beispiel keine Setter Methode geht ?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Hinzufügen mehrer JPanels zu einem JFrame AWT, Swing, JavaFX & SWT 2
G Namen mehrer Checkboxen abfragen AWT, Swing, JavaFX & SWT 7
M Eigene Klasse für mehrer JSplitPanes AWT, Swing, JavaFX & SWT 3
Kidao Mehrer Panels, mit Buttons in einem Frame abwechselnd laden? AWT, Swing, JavaFX & SWT 3
loadbrain Mehrer Panesl: JScrollBar, JScrollPane? AWT, Swing, JavaFX & SWT 9
G Keys zuweisen, 1 Key für mehrer Button AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Fragen AWT, Swing, JavaFX & SWT 6
thor_norsk Allgemeine Fragen AWT, Swing, JavaFX & SWT 4
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
D Fragen zur GUI AWT, Swing, JavaFX & SWT 4
M NetBeans JFrame Grundlangen fragen AWT, Swing, JavaFX & SWT 6
T JavaFX Allgemeine Fragen zu JavaFX (uA zu Properties) AWT, Swing, JavaFX & SWT 6
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
K Fragen zu JavaFx Canvas AWT, Swing, JavaFX & SWT 0
N Swing Fragen zu non-modal JDialog AWT, Swing, JavaFX & SWT 1
Q Fragen zur JMenuBar & Co. AWT, Swing, JavaFX & SWT 3
F DefaultTreeCellEditor - Fragen zur Groesse und zum Icon beim Editieren AWT, Swing, JavaFX & SWT 4
Kenan89 JMenu Fragen AWT, Swing, JavaFX & SWT 5
Luk10 (LWJGL) Fragen zu VBOs AWT, Swing, JavaFX & SWT 21
M Swing JTextPane + Scrollbar = Fragen AWT, Swing, JavaFX & SWT 15
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
J Das erste Projekt und ein Haufen von Fragen. Der SudokuReader. AWT, Swing, JavaFX & SWT 4
Luk10 Fragen zum Laden von Fonts AWT, Swing, JavaFX & SWT 4
Luk10 Fragen zum Koordinaten System AWT, Swing, JavaFX & SWT 3
M JTable Grundlegende Fragen AWT, Swing, JavaFX & SWT 4
B Prozentrechner GUI Fragen AWT, Swing, JavaFX & SWT 4
H Fragen zu JPanel und JButton AWT, Swing, JavaFX & SWT 3
Q Swing Zeichenprogramm, grundlegende Fragen AWT, Swing, JavaFX & SWT 8
U Swing Fragen bezüglich Multithreaded GUIs (Grundlagen): AWT, Swing, JavaFX & SWT 3
R LayoutManager GridBagLayout Fragen AWT, Swing, JavaFX & SWT 10
A diverse Layout-Fragen AWT, Swing, JavaFX & SWT 4
M LayoutManager Einige Fragen zum GridBagLayout AWT, Swing, JavaFX & SWT 13
H Swing Zwei Fragen AWT, Swing, JavaFX & SWT 5
S 2D-Grafik Diverse Fragen zu Imagemanipulation in Java AWT, Swing, JavaFX & SWT 11
C Swing Grundsätzliche Fragen zu MVC AWT, Swing, JavaFX & SWT 8
F 3 Fragen zu Applets AWT, Swing, JavaFX & SWT 4
L Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel AWT, Swing, JavaFX & SWT 9
S Fragen zu GridBagLayout AWT, Swing, JavaFX & SWT 6
B Zeichnen in Swing - Jede Menge Fragen! AWT, Swing, JavaFX & SWT 2
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
D GridBagLayout und JEditorPane (mehrere fragen) AWT, Swing, JavaFX & SWT 2
A Swing einfache fragen zu frame AWT, Swing, JavaFX & SWT 10
P Mehrere Fragen AWT, Swing, JavaFX & SWT 4
A Fragen zu Microber AWT, Swing, JavaFX & SWT 4
T Fragen zu JList und DnD AWT, Swing, JavaFX & SWT 13
I Einige Fragen zu JList AWT, Swing, JavaFX & SWT 6
I Drei Fragen/Probleme mit einer JTable AWT, Swing, JavaFX & SWT 9
G Fragen zum FileChooser AWT, Swing, JavaFX & SWT 5
M 2 Kleine Fragen zum JOptionFrame AWT, Swing, JavaFX & SWT 5
G performance fragen zu AWT, Swing AWT, Swing, JavaFX & SWT 14
J Fragen zu JTable und JScrollpane AWT, Swing, JavaFX & SWT 2
R Frage zu Listfeld oder jTable, auch andere Fragen AWT, Swing, JavaFX & SWT 5
C Fragen zur Darstellung einer JTable mittels Renderer AWT, Swing, JavaFX & SWT 2
ModellbahnerTT Fragen zu AWT AWT, Swing, JavaFX & SWT 3
S Fragen Databinding? AWT, Swing, JavaFX & SWT 3
J Fragen zu AWT Komponenten AWT, Swing, JavaFX & SWT 5
U 2 Fragen zu BufferedImages AWT, Swing, JavaFX & SWT 19
J Fragen zur Vererbung und Update AWT, Swing, JavaFX & SWT 12
J Fragen zum SyntaxHighlighting (DefaultStyledDocument) AWT, Swing, JavaFX & SWT 2
I Ein paar SWT Fragen AWT, Swing, JavaFX & SWT 10
P Zwei Fragen zu Bildern in Applets AWT, Swing, JavaFX & SWT 2
isowiz Einige Fragen zur ersten eigenen Sing-Applikation AWT, Swing, JavaFX & SWT 4
G 2 Fragen JDesktopPane AWT, Swing, JavaFX & SWT 4
S Fragen zu einem Beispiel(Swings und AWT) AWT, Swing, JavaFX & SWT 33
G Fragen zum Ocean Look and Feel AWT, Swing, JavaFX & SWT 3
G Neue Komponente erstellen - Fragen/Probleme mit MouseEvents AWT, Swing, JavaFX & SWT 2
Y 2 Fragen- JList Inhalt ändern und Fenster invisible setzen AWT, Swing, JavaFX & SWT 5
C Gemischte Fragen AWT, Swing, JavaFX & SWT 10
G Fragen zu JList AWT, Swing, JavaFX & SWT 12
K 2 fragen:JCheckBoxMenuItem und ComboBox AWT, Swing, JavaFX & SWT 2
T Mehrere Fragen zu JToolBar AWT, Swing, JavaFX & SWT 2
N 2 Fragen (zu binärem Suchen und Scrollbar) AWT, Swing, JavaFX & SWT 6
B Einige Fragen zum GUI AWT, Swing, JavaFX & SWT 3
N JPanel vergrößert sich bei zu großem Bild AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben