Portal > Foren > Java > Desktop-Applikationen und Grafik > Color lässt sich nicht verändern
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 12.05.2005, 15:00 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard Color lässt sich nicht verändern

Die "Hauptklasse" ruft diese Klasse auf:

PHP-Code:
class ownDesign extends JDialog implements ActionListener 
    
   
ZeichnenTet mal = new ZeichnenTet(); 
   
String[] str = { "<html>Alle Werte von<br>0 - 255<html>""Rotwert""Grünwert""Blauwert""Bestätigen" }; 
   
String[] str2 = { "<html>1. Hintergrund-<br>farbe<html>""<html>2. Hintergrund-<br>rahmen<html>""<html>3. Deadline<br>4. Punktestand<html>""<html> 5. Steinfarbe<br>6. Steinrahmen<html>" }; 
   
JPanel pane = new JPanel(); 
   
JPanel[] vorschau = new JPanel[6]; 
   
JButton[] oks = new JButton[6]; 
   
JButton uebernehmen = new JButton("Ändern"); 
   
JTextField[] werte = new JTextField[18]; 
   
JLabel[] beschriftung = new JLabel[5]; 
   
JLabel[] legende = new JLabel[str2.length]; 
    
   public 
ownDesign() { 
       
      
setSize(500300); 
      
pane.setLayout(new GridLayout(8455)); 
      
uebernehmen.addActionListener(this); 
      for (
int a 0str.lengtha++) { 
         
beschriftung[a] = new JLabel(str[a]); 
         
pane.add(beschriftung[a]); 
      } 
      for (
int a 06a++) { 
         
vorschau[a] = new JPanel(); 
         
pane.add(vorschau[a]); 
         
vorschau[a].setBackground(Color.black); 
         for (
int b 33b++) { 
            
werte[b] = new JTextField(""3); 
            
pane.add(werte[b]); 
         } 
         
oks[a] = new JButton("OK"); 
         
oks[a].addActionListener(this); 
         
pane.add(oks[a]); 
      } 
      for (
int a 0str2.lengtha++) { 
         
legende[a] = new JLabel(str2[a]); 
         
pane.add(legende[a]); 
      } 
      
pane.add(uebernehmen); 
      
setContentPane(pane); 
   } 
    
   public 
void actionPerformed(ActionEvent evt) { 
       
      
Object source evt.getSource(); 
      if (
source == uebernehmen) { 
         try { 
            
mal.back = new Color(Integer.parseInt(werte[0].getText()), Integer.parseInt(werte[1].getText()), Integer.parseInt(werte[2].getText())); 
            
mal.rahmenBack = new Color(Integer.parseInt(werte[3].getText()), Integer.parseInt(werte[4].getText()), Integer.parseInt(werte[5].getText())); 
            
mal.deadline = new Color(Integer.parseInt(werte[6].getText()), Integer.parseInt(werte[7].getText()), Integer.parseInt(werte[8].getText())); 
            
mal.punktestand = new Color(Integer.parseInt(werte[9].getText()), Integer.parseInt(werte[10].getText()), Integer.parseInt(werte[11].getText())); 
            
mal.stein = new Color(Integer.parseInt(werte[12].getText()), Integer.parseInt(werte[13].getText()), Integer.parseInt(werte[14].getText())); 
            
mal.rahmenStein = new Color(Integer.parseInt(werte[15].getText()), Integer.parseInt(werte[16].getText()), Integer.parseInt(werte[17].getText())); 
         } 
         catch (
NumberFormatException e) { 
            
JOptionPane.showMessageDialog(null
            
"Bitte Werte zwischen 0 und 255 eingeben"
            
"Fehler!"
            
JOptionPane.ERROR_MESSAGE); 
         } 
      } 
      else { 
         for (
int a 06a++) { 
            if (
source == oks[a]) { 
               try { 
                  
vorschau[a].setBackground(new Color(Integer.parseInt(werte[3].getText()), Integer.parseInt(werte[1].getText()), Integer.parseInt(werte[2].getText()))); 
               } 
               catch (
NumberFormatException e) { 
                  
JOptionPane.showMessageDialog(null
                  
"Bitte Werte zwischen 0 und 255 eingeben"
                  
"Fehler!"
                  
JOptionPane.ERROR_MESSAGE); 
               } 
            } 
         } 
      } 
   } 

und diese ändert dann Colorwerte in der Klasse ZeichnenTet. Nur werden die nicht übernommen :confused: . Wenn ich dagegen in meiner Klasse von der ich ownDesign aufrufe die Werte für ZeichnenTet ändere funktioniert das einwandfrei. Woran liegt das?
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.05.2005, 15:08 Nach oben    #2
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 582
Standard

Was bedeutet sie werden nicht übernommen?

Wenn ich dich richtig verstehe:

Du hast in der Hauptklasse auch eine Instanz von ZeichnenTet() und möchtest die hierheraus ändern?

Gruß
Sparrow
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.05.2005, 15:21 Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard

Ich möchte von dieser Klasse aus die Farben einer anderen Klasse ändern. Wenn ich das ganze von der Hauptklasse aus mache (die Farben ändern), dann funktioniert das einwandfrei, aber wenn ich es von ownDesign mache, klappt das nicht :confused:
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.05.2005, 16:05 Nach oben    #4
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 582
Standard

Versuch mal bitte foldends:

PHP-Code:
         try { 
            
mal.back = new Color(Integer.parseInt(werte[0].getText()), Integer.parseInt(werte[1].getText()), Integer.parseInt(werte[2].getText())); 
            
mal.rahmenBack = new Color(Integer.parseInt(werte[3].getText()), Integer.parseInt(werte[4].getText()), Integer.parseInt(werte[5].getText())); 
            
mal.deadline = new Color(Integer.parseInt(werte[6].getText()), Integer.parseInt(werte[7].getText()), Integer.parseInt(werte[8].getText())); 
            
mal.punktestand = new Color(Integer.parseInt(werte[9].getText()), Integer.parseInt(werte[10].getText()), Integer.parseInt(werte[11].getText())); 
            
mal.stein = new Color(Integer.parseInt(werte[12].getText()), Integer.parseInt(werte[13].getText()), Integer.parseInt(werte[14].getText())); 
            
mal.rahmenStein = new Color(Integer.parseInt(werte[15].getText()), Integer.parseInt(werte[16].getText()), Integer.parseInt(werte[17].getText())); 
         } 
System.out.println(mal.back);
System.out.println(mal.rahmenBack); 
Mal schauen ob die Variablen in der Klasse ankommen, oder die Variablen in der Klasse als final oder private sind.

Also, eigentlich sollte es jetzt zur Ausgabe der Werte der Varianblen kommen.


Gib mir mal ein Schema deines Programms, wird diese Klasse ZeichnenDet irgendwo im Programm nochmal verwendet?
Und wenn ja, warum?

Gruß
Sparrow
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2005, 07:45 Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard

ZeichnenTet, wird noch von meiner Hauptklasse benutzt. Jup, werte kommen an! Das komische ist, wenn ich das ganze so umschreibe, dass ich eine Methode in der Klasse ZeichnenTet habe, der ich dann die jeweiligen Werte übergebe und mit diesen dann direkt in der Klasse die Farben ändere (also praktisch so:

PHP-Code:
 class ZeichnenTet extends JPanel {
...
   
void changeColor(... die ganzen Farben übergeben) {
 
     
back = new Color(... werte);
     
backRahmen = new Color(... werte);
     ...
   }
}
 
class 
ownDesign extends JDialog implements ActionListener {
 
   
ZeichnenTet mal = new ZeichnenTet();
   ...
   
mal.changeColor(... werte)

), dann stimmen sie zwar, wenn ich sie ausgebe in der Methode changeColor, aber beim Neuzeichnen nicht mehr. Hoff ich konnt mich einigermaßen klar ausdrücken, dass was ich geschrieben hab verwirrt mich nämlich selbst
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2005, 09:02 Nach oben    #6
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 582
Standard

wenn ich dich richtig vertanden habe, dann hast du vergessen die Instanz von ZeichnenTet aus der Hauptklasse nach ownDesign zu übergeben:

PHP-Code:
class ownDesign extends JDialog implements ActionListener 
    
   
ZeichnenTet mal;  // Change by sparrow@jforum
   
String[] str = { "<html>Alle Werte von<br>0 - 255<html>""Rotwert""Grünwert""Blauwert""Bestätigen" }; 
   
String[] str2 = { "<html>1. Hintergrund-<br>farbe<html>""<html>2. Hintergrund-<br>rahmen<html>""<html>3. Deadline<br>4. Punktestand<html>""<html> 5. Steinfarbe<br>6. Steinrahmen<html>" }; 
   
JPanel pane = new JPanel(); 
   
JPanel[] vorschau = new JPanel[6]; 
   
JButton[] oks = new JButton[6]; 
   
JButton uebernehmen = new JButton("Ändern"); 
   
JTextField[] werte = new JTextField[18]; 
   
JLabel[] beschriftung = new JLabel[5]; 
   
JLabel[] legende = new JLabel[str2.length]; 
    
   public 
ownDesign(ZeichnenTet mal) {   // Change by sparrow@jforum 
      
this.mal mal;                              // Change by sparrow@jforum
      
setSize(500300); 
      
pane.setLayout(new GridLayout(8455)); 
      
uebernehmen.addActionListener(this); 
      for (
int a 0str.lengtha++) { 
         
beschriftung[a] = new JLabel(str[a]); 
         
pane.add(beschriftung[a]); 
      } 
      for (
int a 06a++) { 
         
vorschau[a] = new JPanel(); 
         
pane.add(vorschau[a]); 
         
vorschau[a].setBackground(Color.black); 
         for (
int b 33b++) { 
            
werte[b] = new JTextField(""3); 
            
pane.add(werte[b]); 
         } 
         
oks[a] = new JButton("OK"); 
         
oks[a].addActionListener(this); 
         
pane.add(oks[a]); 
      } 
      for (
int a 0str2.lengtha++) { 
         
legende[a] = new JLabel(str2[a]); 
         
pane.add(legende[a]); 
      } 
      
pane.add(uebernehmen); 
      
setContentPane(pane); 
   } 
    
   public 
void actionPerformed(ActionEvent evt) { 
       
      
Object source evt.getSource(); 
      if (
source == uebernehmen) { 
         try { 
            
mal.back = new Color(Integer.parseInt(werte[0].getText()), Integer.parseInt(werte[1].getText()), Integer.parseInt(werte[2].getText())); 
            
mal.rahmenBack = new Color(Integer.parseInt(werte[3].getText()), Integer.parseInt(werte[4].getText()), Integer.parseInt(werte[5].getText())); 
            
mal.deadline = new Color(Integer.parseInt(werte[6].getText()), Integer.parseInt(werte[7].getText()), Integer.parseInt(werte[8].getText())); 
            
mal.punktestand = new Color(Integer.parseInt(werte[9].getText()), Integer.parseInt(werte[10].getText()), Integer.parseInt(werte[11].getText())); 
            
mal.stein = new Color(Integer.parseInt(werte[12].getText()), Integer.parseInt(werte[13].getText()), Integer.parseInt(werte[14].getText())); 
            
mal.rahmenStein = new Color(Integer.parseInt(werte[15].getText()), Integer.parseInt(werte[16].getText()), Integer.parseInt(werte[17].getText())); 
         } 
         catch (
NumberFormatException e) { 
            
JOptionPane.showMessageDialog(null
            
"Bitte Werte zwischen 0 und 255 eingeben"
            
"Fehler!"
            
JOptionPane.ERROR_MESSAGE); 
         } 
      } 
      else { 
         for (
int a 06a++) { 
            if (
source == oks[a]) { 
               try { 
                  
vorschau[a].setBackground(new Color(Integer.parseInt(werte[3].getText()), Integer.parseInt(werte[1].getText()), Integer.parseInt(werte[2].getText()))); 
               } 
               catch (
NumberFormatException e) { 
                  
JOptionPane.showMessageDialog(null
                  
"Bitte Werte zwischen 0 und 255 eingeben"
                  
"Fehler!"
                  
JOptionPane.ERROR_MESSAGE); 
               } 
            } 
         } 
      } 
   } 


Instanzierung von ownDesign in der Hauptklasse dann wie folgt:

PHP-Code:
OwnDesign ownDesign = new OwnDesign(deineInstanzVonZeichnenTetInHauptklasse); 

Ich hoffe das ist dein Problem
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2005, 09:07 Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard

Jo, so funktionierts! Ich bin begeistert! Wenn du mir jetzt noch erklärst warum das so ist, bin ich glücklich . So hab ich das nämlich noch nie gemacht und ich weiß auch nicht wirklich warum es jetzt funktioniert und vorher nicht.:confused:
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2005, 10:00 Nach oben    #8
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 582
Standard

Ok, ich versuchs.
Allerdings bin ich nicht so der Erklärbär, sag ruhig wenn ich es nicht verständlich rüberbringe.

Also hier der Versuch der Erklärung

Du hattest in ownDesign ein Objekt names mal erstellt.
mal ist eine Instanz von ZeichnenTet
Da du direkt in der 1. Zeile das Objekt ownDesign mit new ZeichnenTet() instanzierst, läuft hier eine Instanz der Klasse die nichts mit der Klasse aus deiner Hauptklasse zu tun hat.
Kleines Beispiel:

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();

Sop, wir haben gerade 2 Instanzen eines JPanels angelegt.
Wenn wir jetzt auf panel1 Komponenten einfügen tauchen sie ja auc nicht auf panel2 auf.
Das selbe Problem hattest du bei deinem Programm.
Auch wenn du die gleichen objektnamen vergeben hast, da
1. neu instanziert wurde
2. die Instanzierung in einer völlig anderen Klasse geschah (siehe sichtbarkeit von Variablen und Objekten)
war es eine völlig eigene Instanz.

Mit den von mir geänderten Codesegmenten, so übrigens üblich in Java, hast du einfach die Instanz deiner MalenDet Klasse aus der Hauptklasse mit in die neue Klasse übergeben.
Dort gibt es ebenfalls ein Objekt mit dem Namen 'mal', angelegt als Klassenobjekt (Klassenvariable) und mit dem
this.mal = mal;
weist du einfach nur dem Klassenobjekt die übergebene Instanz zu.

Im Prinzip tust du nichts anderes als:

JPanel panel1 = new JPanel();
JPanel panel2 = panel1;


Alternativ hättest du Übrigens auch eine Instanz deienr Hauptklasse an ownDesign übergeben können, das darin enthaltene Objekt mal als public definieren können und dann direkt onwDesign mit
deineHautklassenInstanz.deineDetMalenInstanz.

darauf zugreifen können.



Gruß
Sparrow
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2005, 10:04 Nach oben    #9
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard

Perfekt! Danke!
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche