Frage von critix9, 83

Problem mit .setBackground Java?

Hallo, Ich habe in einem Java Programm mehrere Button und möchte abhängig davon welcher Button geklickt wurde, diesem Button eine bestimmte Hintergrundfarbe geben. Da ich aber nicht weiß welcher Button geklickt wurde schreibe ich den Namen des geklickten Buttons in den String buttonname und möchte mit Hilfe dieses Strings die Farbe des Buttons ändern. Ich habe mir das so gedacht:

String farbe = new String("0x00FF00);
JButton button = new JButton();
String buttonname = new String("button");
buttonname.setBackground(Color.decode(farbe));

Da es so nicht funktioniert, möchte ich fragen ob jemand weiß wie ich mit Hilfe des Strings buttonname die Farbe des Buttons ändern kann.

Antwort
von Mornamath, 61

ich finde deinen Weg zwar etwas seltsam, aber ok.  Wahrscheinlich handelt es sich hier um eine Aufgabe, die mit dieser Variable buttonname gelöst werden soll?

Dann würde ich es so machen:

Der Clicklistener jedes einzelnen Buttons ruft ja eine Methode auf.  In diese Methode musst du beim jeweiligen Button einfach nur reinschreiben, dass die Variable buttonname auf einen bestimmten Wert gesetzt werden soll.

Und dann würde ich eine zweite Methode schreiben, die den Button, mit dem Namen, der in der Variable gespeichert ist, auf einen bestimmten Farbwert setzt.

Kommentar von critix9 ,

Danke für die schnelle Antwort.

die beiden Methoden mit denen ich den Namen des Buttons und die zugehörige Farbe in die beiden Strings schreibe habe ich schon. 

Nur die Zeile

buttonname.setBackground(Color.decode(farbe));

funktioniert nicht, da ich anscheinend keine String Variable vor .setBackground schreiben darf sondern nur den "richtigen" Namen des Buttons also in diesem Fall:

button.setBackground(Color.decode(farbe));
Kommentar von Mornamath ,

moment, das muss ich mal kurz ausprobieren :D  das geht aber schon irgendwie, kann sein, dass man das in Klammern setzen muss.  Ich muss mal kurz ausprobieren. 5 Minuten, dann melde ich mich nochmal hier

Kommentar von Mornamath ,

also ich habs jetzt mal probiert und muss leider zugeben, dass du hier wirklich ein seltsames Problem hast.  Also entweder ich übersehe jetzt hier gerade etwas egentlich ganz einfaches, oder aber das geht so wirklich nicht. 

Handelt es sich hierbei um eine Aufgabe?  Wenn ja, schick doch mal bitte die ganze Aufgabe.

Es wüsste zwar eine Möglichkeit, wie man das lösen könnte, aber das weicht schon ein bisschen ab, von dem, was du hier vor hattest.  Und wenn du es so lösen sollst... na dann muss es ja so auch gehen

Kommentar von Mornamath ,

hier mal meine Methode.  So funktionierts auf jeden Fall.  Ob das noch deiner Aufgabenstellung entspricht, weiß ich nicht.

Kannst es ja mal compillieren und ausführen.  Sollte funktionieren.



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
* @version 1.0 vom 27.02.2016
* @author Mornamath
*/

public class test extends JFrame {
private JButton jButton1 = new JButton();
private JButton b= new JButton();
private JButton jButton2 = new JButton();
private JButton jButton3 = new JButton();
private JButton jButton4 = new JButton();
private JLabel jLabel1 = new JLabel();
private JTextField jTextField1 = new JTextField();
private String buttonname="";

public test(String title) {
super(title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 300;
int frameHeight = 300;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);

jButton1.setBounds(104, 32, 75, 25);
jButton1.setMargin(new Insets(2, 2, 2, 2));
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton1_ActionPerformed(evt);
}
});
cp.add(jButton1);
jButton2.setBounds(104, 64, 75, 25);
jButton2.setMargin(new Insets(2, 2, 2, 2));
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton2_ActionPerformed(evt);
}
});
cp.add(jButton2);
jButton3.setBounds(104, 96, 75, 25);
jButton3.setMargin(new Insets(2, 2, 2, 2));
jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton3_ActionPerformed(evt);
}
});
cp.add(jButton3);
jButton4.setBounds(104, 128, 75, 25);
jButton4.setMargin(new Insets(2, 2, 2, 2));
jButton4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton4_ActionPerformed(evt);
}
});
cp.add(jButton4);
jLabel1.setBounds(16, 192, 38, 20);
jLabel1.setText("Farbe:");
cp.add(jLabel1);
jTextField1.setBounds(64, 192, 150, 20);
cp.add(jTextField1);

setVisible(true);
}


public static void main(String[] args) {
new test("test");
}

public void jButton1_ActionPerformed(ActionEvent evt) {
buttonname="jButton1";
farbeSetzen();
}

public JButton test(){
switch (buttonname) {
case "jButton1" :
return jButton1;
case "jButton2":
return jButton2;
case "jButton3":
return jButton3;
case "jButton4":
return jButton4;
default: return null;

}
}

public void farbeSetzen(){
test().setBackground(Color.decode(jTextField1.getText()));
}

public void jButton2_ActionPerformed(ActionEvent evt) {
buttonname="jButton2";
farbeSetzen();
}

public void jButton3_ActionPerformed(ActionEvent evt) {
buttonname="jButton3";
farbeSetzen();
}

public void jButton4_ActionPerformed(ActionEvent evt) {
buttonname="jButton4";
farbeSetzen();
}
}
Kommentar von critix9 ,

Die Aufgabe ist das Spiel Mastermind zu programmieren, wie ich das löse kann ich mir selbst aussuchen. Dabei habe ich mehrere Buttons die bei einem klick darauf ihre Farbe ändern sollen. So wie ich es versucht habe erschien es mir am einfachsten. Wenn andere Lösungen besser geeignet sind wäre das auch kein Problem.

Kommentar von Mornamath ,

schau dir mal den Code an, den ich oben gepostet habe.  Compillier den mal und schau, ob das so ist, wie du es dir vorstellst.

Kommentar von critix9 ,

Danke

Ich schau mir den mal durch und sag dir Bescheid.

Kommentar von Mornamath ,

Übrigens, ich hqb jetzt nochmal kurz nachgedacht und muss sagen, irgendwie hatte ich vorhin anscheinend auch nen Aussetzer...  Deine Methode kann so nicht funktionieren, da .der background eine Methode der Klasse JButton ist... Kann ja so gar nicht funktionieren.  Es geht hier ja nicht um den Namen, der im Quelltext dortsteht., sondern darum, dass das Programm eine Referenz auf den buton braucht, auf dem die Methode ausgeführt werden soll und die kann bei einem string ja gar nicht da sein.  Du könntest es mit deiner Methode und einem JButton als variable, anstelle des strings probieren. (Oder du versuchte es so, wie in meinem Quelltext oben)

Kommentar von critix9 ,

Ich habs jetzt geschafft mit deinem Code 

Vielen Dank ;)

Antwort
von PerfectMuffin, 25

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten