Eigenschaften eines Buttons per Setter verändern

nobsche

Mitglied
Ich möchte ein Programm erstellen in dem die meisten Buttons deaktiviert sind, damit diese nicht angeklickt werden können, wenn noch nicht alle Daten erfasst sind. So soll z. B. geprüft werden ob alle Textfelder gefüllt sind. Erst wenn dies der Fall ist, sollte der Button "Daten erfassen" aktiviert werden.
Die Prüfung soll in einer anderen Klasse in einem anderen Paket stattfinden. Die Buttons sind Private deklariert und zum aktivsetzen des Buttons ist ein entsprechender Setter vorhanden. Um nicht zu viel überflüssigen Code posten zu müssen, habe ich ein Programm geschrieben, welches die Problematik exakt wiedergibt. Es besteht im Grunde nur aus zwei Buttons. Der erste ist deaktiviert und soll aktiviert werden, wenn der zweite angeklickt wird.

Hier der code:
Java:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class buttons extends JFrame {

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JButton btn_button;
    private JButton btn_button2;
    
    
    

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    buttons frame = new buttons();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public buttons() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        btn_button = new JButton("Button");
        btn_button.setEnabled(false);
        btn_button.setBounds(29, 12, 114, 25);
        contentPane.add(btn_button);
        
        btn_button2 = new JButton("Button 2");
        btn_button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                new pressButton().activateButton();
            }
        });
        btn_button2.setBounds(29, 60, 114, 25);
        contentPane.add(btn_button2);
    }

    
    public void setBtn_button2(boolean b) {
        System.out.println("erreicht"); //Zum Testen ob die Methode erreicht wird.
        this.btn_button.setEnabled(b);
        
    }

}

Java:
public class pressButton {

    public void activateButton() {
        buttons ab = new buttons();
        ab.setBtn_button2(true);
        
    }
}


In der Klasse "pressButton" wird nur der Setter angesprochen, welcher den ersten Button setEnabled(true) schalten soll.
Das die Settermethode erreicht wird, lässt sich anhand einer kleinen Konsolentextausgabe nachvollziehen. Die Zeile "this.btn_button.setEnabled(b)" scheint jedoch nicht berücksichtigt zu werden. Es erscheint keine Fehlermeldung und der Button wird nicht aktiv geschaltet. Der übergebene Boolean b hat zu diesem Zeitpunkt den wert "true". Das habe ich im Debugging-Modus sehen können.

Vermutlich ist es nur eine Kleinigkeit die ich übersehen habe. Aber ich brüte nun schon seit einigen Tagen an diesem Problem und finde keine Lösung. Google und die Forensuche haben mir bisher leider auch nicht weitergeholfen. Könnt ihr mir sagen was ich falsch mache?

Ich danke euch schon mal für eure Unterstützung.

Viele Grüße
nobsche
 

mrBrown

Super-Moderator
Mitarbeiter
Du erstellst in activateButtons ein neues buttons-Objekt, und in diesem neuen Fenster aktivierst du dann den Button. An dem ursprünglichen, sichtbaren Fenster änderst du aber nichts.
 

nobsche

Mitglied
Vielen Dank für die schnelle Antwort mrBrown.

OK, ich erzeuge ein neues Objekt. Da ich somit nicht auf den bestehenden Button zugreife, kann ich diesen auch nicht verändern. Ich verändere also ein unsichtbares Objekt. Das kann ich nachvollziehen.

Wie aber kann ich den Button verändern? Hier fehlt mir noch eine kleine Idee.
Ich könnte mir den Button mit einem Getter holen. Um den Getter ansprechen zu können, müsste ich aber auch ein neues Objekt erzeugen. Das würde bedeuten, dass ich den Button wieder nicht verändern kann.

Ich glaube hier fehlt mir der richtige Ansatz.
 

Blender3D

Top Contributor
Wie aber kann ich den Button verändern? Hier fehlt mir noch eine kleine Idee.
Hier ein Beispiel. Teste es und überlege dir die Funktionsweise.
Java:
import javax.swing.JFrame;

public class start {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.getContentPane().add(new ButtonPropertyChanger(500, 500));
        frame.setTitle(" Change Button poperties");
        frame.pack();
        frame.setVisible(true);
    }
}
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class ButtonPropertyChanger extends JPanel implements ActionListener {
    private JButton button = new JButton("Test");

    public ButtonPropertyChanger(int width, int height) {
        setPreferredSize(new Dimension(width, height));
        setBackground(Color.DARK_GRAY);
        CtrlBar bar = new CtrlBar(this);
        bar.setPreferredSize(new Dimension(width, 30));
        add(bar, BorderLayout.NORTH);
        add(button, BorderLayout.CENTER);
        button.setPreferredSize(new Dimension(200, 40));
        button.setFocusable(false);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        if (cmd.equals(CtrlBar.getCmd(CtrlBar.TEXT)))
            changeText();
        if (cmd.equals(CtrlBar.getCmd(CtrlBar.VISIBLE)))
            button.setVisible(!button.isVisible());
        if (cmd.equals(CtrlBar.getCmd(CtrlBar.ENABLED)))
            button.setEnabled(!button.isEnabled());
        if (cmd.equals(CtrlBar.getCmd(CtrlBar.RESIZE)))
            changeSize();
        if (cmd.equals(CtrlBar.getCmd(CtrlBar.COLOR)))
            changeColor();
    }

    private void changeColor() {
        Color color = JColorChooser.showDialog(this, "Farbe wählen", button.getBackground());
        if (color != null)
            button.setBackground(color);
    }

    private void changeSize() {
        Dimension dim = inputDimension();
        if (dim != null) {
            button.setPreferredSize(dim);
            setVisible(false);
            setVisible(true);
        }
    }

    private void changeText() {
        String text = JOptionPane.showInputDialog(this, "Neuer Text", button.getText());
        if (text != null)
            button.setText(text);
    }

    private Dimension inputDimension() {
        String dim = JOptionPane.showInputDialog(this, "Weite, Höhe", button.getWidth() + "," + button.getHeight());
        if (dim != null) {
            int[] values = strToDim(dim);
            if (values == null)
                JOptionPane.showConfirmDialog(this, "Bitte 2 ganze Zahlen durch Beistrich getrennt eingeben!");
            else
                return new Dimension(values[0], values[1]);
        }
        return null;
    }

    private int[] strToDim(String dim) {
        int[] values = new int[2];
        String[] strValues = dim.split(",");
        if (values == null || values.length != 2)
            return null;
        try {
            for (int i = 0; i < values.length; i++) {
                values[i] = Integer.parseInt(strValues[i].trim());
            }
        } catch (NumberFormatException e) {
            return null;
        }
        return values;
    }

}
Java:
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JToolBar;

@SuppressWarnings("serial")
public class CtrlBar extends JToolBar {
    private static String[] cmd = { "resize", "visible", "enabled", "text", "color" };
    public final static int RESIZE = 0;
    public final static int VISIBLE = 1;
    public final static int ENABLED = 2;
    public final static int TEXT = 3;
    public final static int COLOR = 4;

    public CtrlBar(ActionListener listener) {
        setRollover(true);
        setFloatable(false);
        for (int i = 0; i < cmd.length; i++) {
            addSeparator();
            addSeparator();
            JButton b = new JButton(cmd[i]);
            b.setFocusable(false);
            add(b);
            b.addActionListener(listener);
        }
    }

    public static final String getCmd(int i) {
        if (i < 0 || i >= cmd.length)
            throw new IllegalArgumentException();
        return cmd[i];
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Eigenschaften eines Buttons überschreiben/ändern Allgemeine Java-Themen 2
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
C OOP Klassen mit "Eigenschaften" Allgemeine Java-Themen 10
D Eigenschaften von Objecten Allgemeine Java-Themen 6
S PropertyDescriptor -> geerbte Eigenschaften ausblenden Allgemeine Java-Themen 3
D Map mit Collection Eigenschaften Allgemeine Java-Themen 9
F Eigenschaften von MP3 Dateien bestimmen Allgemeine Java-Themen 2
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
F Teil eines Bildes laden Allgemeine Java-Themen 1
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
RalleYTN Input/Output URL eines Zip Entry? Allgemeine Java-Themen 2
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
J NullPointerExeption bei Inizialisierung eines Arrays Allgemeine Java-Themen 3
I Setzen und Lesen eines Objektes (Enum?) Allgemeine Java-Themen 10
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
thet1983 nach teilen eines Dateinamens suchen Allgemeine Java-Themen 6
T Bezeichnung eines Objektes mit String/int kombinieren Allgemeine Java-Themen 3
Z Auswerten eines eingegeben Termes Allgemeine Java-Themen 13
X Registrierung eines Ecore-Models außerhalb der Eclipse-Umgebung Allgemeine Java-Themen 0
R Instanzen eines Programms Allgemeine Java-Themen 8
I Arbeitsmaterialien eines Softwareentwicklers? Allgemeine Java-Themen 7
L Größe eines Objekts im Arbeitsspeicher Allgemeine Java-Themen 1
D Name eines Nicht-String Objekts ausgeben Allgemeine Java-Themen 4
A Helligkeit eines Bildes berechnen Allgemeine Java-Themen 1
L Anzahl der Tage eines Monats Allgemeine Java-Themen 3
S Java Problem bei der Rückgabe eines Arrays Allgemeine Java-Themen 19
C Best Practice Tiefe Kopie eines Arrays unbekannter Dimension und unbekannten Typs Allgemeine Java-Themen 4
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
C Methode für tiefe Kopie eines unbekannt (dimensionierten & typisierten) Feldes realisierbar? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben