Umgang mit der Update Methode

elochai

Mitglied
Hallo
Ich arbeite erst seit kurzem mit Java Swing usw., also ist meine Frage wahrscheinlich ungenau gestellt und verwirrend ;)
Ich habe ein Programm welches mir über einen FileChooser ein Bild öffnen soll. Jedoch weiß ich nicht genau wie ich das Programm dann aktualisieren kann damit es mir mein Bild dann auch anzeigt. Dass muss doch bestimmt über die update Methode gehn ,welche ich von Observer überschreibe?
Ich hoffe ihr könnt mir helfen :)
 

elochai

Mitglied
Muss ich das in der update Methode aufrufen? Wenn ja, dann passiert bei screen.repaint() leider nichts. Screen ist mein JPanel in dem das Bild angezeigt werden soll
 

Michael...

Top Contributor
Zeichnen in Swing funktioniert durch erben von JComponent oder JPanel und überschreiben der paintComponent(...). Um ein Bild zu zeichnen/wechseln image setzen und repaint() an der Komponente aufrufen.
Java:
class Scree extends JComponent {
	private BufferedImage image;
	
	...

	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		if (image!=null)
			g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
	}
}
 

elochai

Mitglied
Ok. Ich hab mein Programm aber mit ImageIcon aufgebaut und würde das gerne belassen. Ich habe bis jetzt eine Methode, welche mir den Pfad der ausgewählten Datei als String zurückgibt. Diesen übergebe ich dann dem Konstruktor für ein neues ImageIcon also
ImageIcon picture = new ImageIcon (""+pic);
Zuvor hatte ich statt dem String eine URL und das ging wunderbar. Aber ich denke dass ich jetzt doch bestimm das Prog i-wie aktualisiern muss damit es mit mein Bild anzeigt oder?? :)
 

elochai

Mitglied
Ok. Also ich hab mein Programm in View/Model/Controller aufgeteilt. Hier mal die Teilausschnitte der einzelnen Klassen:
Controller:
Java:
public void actionPerformed(ActionEvent e) {
		String cmd =  e.getActionCommand();
		/** 
		 * Bilder oeffnen
		 */
		if(cmd.equals("Load File")){
			loadFile();
	}}

private void loadFile() {
		JFileChooser chooser = new JFileChooser();
		int returnVal = chooser.showOpenDialog( null );
		if ( returnVal == JFileChooser.APPROVE_OPTION )
	    { mainModel.changePic(chooser.getSelectedFile().getPath());}
	}

Model:
Java:
public class Model extends Observable {
	public Image pic;
	public static String effekt;
	public static boolean newpic;
	public String filters;
	
	public static boolean npic(){	
		return newpic;
	}
	
	
		public void changePic(String a){
			effekt = a;
			pic  = Toolkit.getDefaultToolkit().getImage(a);
			setChanged();
			notifyObservers();
			
		}}

und View
Java:
public View(Controller mainController,String pic,String[] filt) {
    
    	
    this.setTitle("Medientechnik - " + "olympiazentrum.png");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    contentAll.setLayout(new BorderLayout());
    menueleiste.setLayout(new FlowLayout());
    screen.setLayout(new GridBagLayout());
    customize.setLayout(new FlowLayout());
    effects.setLayout(new BorderLayout());
	GridBagConstraints c = new GridBagConstraints();
	orig.setLayout(new BorderLayout());
	orig.setLayout(new BorderLayout());
        
	for(int i = 0; i<filt.length;i++){
		effekte = effekte + filt[i];
	}
	
    try {
    	
      ImageIcon olymp = new ImageIcon (""+pic);
      
      ImageIcon olymp2 = new ImageIcon(""+pic);[...]}}
[...]

@Override
public void update(Observable o, java.lang.Object obj) {
Model m = (Model) o;
if(Model.npic());

}

Es will mir einfach nichts aktualisieren :((
 

elochai

Mitglied
ah ok. stimmt. also ich hab in changePic() noch npic() hinzugefügt. Der Aufruf für pic geschieht über controller
Java:
public Controller() {
		
	mainModel = new Model();
	mainView = new View(this,pic,filters);
	mainModel.addObserver(mainView);
	mainView.setVisible(true);[...]
wobei ich mir nicht sicher bon ob das so richtig ist ???:L
achja und pic hab ich in controller als Klassenvariable mit einem anfangswert. Mir kommen immer mehr Zweifel auf..
 
G

Gast2

Gast
1. würde ich Bilder NICHT über das Toolkit (alt und nicht Ressourcen schonend) laden.
2. Brauchst du irgendein widget (JPanel,JLabel usw.) wo du das Bild anzeigen lassen willst, hast du denn so ein widget? Im Code ist dazu nichts zu finden.
 

Michael...

Top Contributor
ah ok. stimmt. also ich hab in changePic() noch npic() hinzugefügt. Der Aufruf für pic geschieht über controller
Java:
public Controller() {
		
	mainModel = new Model();
	mainView = new View(this,pic,filters);
	mainModel.addObserver(mainView);
	mainView.setVisible(true);[...]
wobei ich mir nicht sicher bon ob das so richtig ist ???:L
achja und pic hab ich in controller als Klassenvariable mit einem anfangswert. Mir kommen immer mehr Zweifel auf..

Die Initialisierung dabei ist uninteressant. Du musst Dir ja in der
Code:
public void update(Observable o, java.lang.Object obj)
die Referenz auf das neue Bild aus dem Model holen und dann auch irgendwo anzeigen lassen - siehe Anmerkungen von SirWayne.
Wie oder worauf werden denn die Bilder nach der Initialisierung also vor dem update angezeigt?
 

elochai

Mitglied
Die Initialisierung dabei ist uninteressant. Du musst Dir ja in der
Code:
public void update(Observable o, java.lang.Object obj)
die Referenz auf das neue Bild aus dem Model holen und dann auch irgendwo anzeigen lassen - siehe Anmerkungen von SirWayne.
Wie oder worauf werden denn die Bilder nach der Initialisierung also vor dem update angezeigt?

Wie ich das in der Update mache, weiß ich eben nicht genau. Das Bild wird einem JLabel zugeordnet welches ein Teil eines JPanels ist. Hier mal der Code:
Java:
try {
    	
      ImageIcon olymp = new ImageIcon (""+pic);
      
      ImageIcon olymp2 = new ImageIcon(""+pic);
     
      float h= (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
      float w= (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
      float olymp_h= olymp.getIconHeight();
      float olymp_w= olymp.getIconWidth();
      //Berrechnet das Seitenverhältniss des Bildes fuer die Skalierung,im if-Fall. Double für praezisere Angaben
      float olymp_verh = olymp_w/olymp_h;
      float pic_resized_h = h/2;
      float pic_resized_w = (h/2)*olymp_verh;
      int res_w = (int) pic_resized_w;
      int res_h = (int) pic_resized_h;
      
      if(olymp_h>h || olymp_w >w/2){
      olymp.setImage(olymp.getImage().getScaledInstance(res_w,res_h,Image.SCALE_FAST)); 
      olymp2.setImage(olymp2.getImage().getScaledInstance(res_w,res_h,Image.SCALE_FAST));} 
      
      else {
          olymp.setImage(olymp.getImage().getScaledInstance((int)olymp_w,(int)olymp_h,Image.SCALE_FAST)); 
          olymp2.setImage(olymp2.getImage().getScaledInstance((int)olymp_w,(int)olymp_h,Image.SCALE_FAST));} 
      
      
    JLabel olym = new JLabel(olymp);
    JLabel olym2 = new JLabel(olymp2);
   [...]
 
G

Gast2

Gast
Du brauchst eine Membervariable von deinem JLabel und dann in der update Methode

myLabel.setImageIcon(model.getImage())

und nicht über das toolkit bilder laden
 

elochai

Mitglied
Gut. Also ich habe mir jetzt eine Membervariable gemacht und der update() olym.setImageIcon(Model.getImage()); hinzugefügt. Jetzt muss ich mir noch die getImage in der Model schreiben richtig? Wie sollte ich Bilder laden, wenn nicht mit Toolkit? :)
 
G

Gast2

Gast
Gut. Also ich habe mir jetzt eine Membervariable gemacht und der update() olym.setImageIcon(Model.getImage()); hinzugefügt. Jetzt muss ich mir noch die getImage in der Model schreiben richtig? Wie sollte ich Bilder laden, wenn nicht mit Toolkit? :)

Ja bei dir würde es getPic() heißen...

Über ImageIO kannst du Bilder laden
 

elochai

Mitglied
Meinst du meine methode changePic() oder? wenn ja, dann weiß ich nicht genau wie ich das dann in der update() anstellen soll, weil mit
Java:
olym.setImageIcon(Model.changePic());
kommt, dass er ein String Argument erwartet, da diese Methode ja einen String braucht um mein Image zu erstellen. Und wenn ich ihm dann zum Test einen gebe, dann kommt dass er von einer statischen nicht auf eine nicht statische zugreifen kann. Hier meine changePic()
Java:
public void changePic(String a) throws IOException{
//			effekt = a;
//			pics  = Toolkit.getDefaultToolkit().getImage(a);
			File datei = new File( a );
			Image image = ImageIO.read( datei );
			setChanged();
			notifyObservers();
			npic();
			
		}
 
G

Gast2

Gast
Meinst du meine methode changePic() oder? wenn ja, dann weiß ich nicht genau wie ich das dann in der update() anstellen soll, weil mit
Java:
olym.setImageIcon(Model.changePic());
kommt, dass er ein String Argument erwartet, da diese Methode ja einen String braucht um mein Image zu erstellen. Und wenn ich ihm dann zum Test einen gebe, dann kommt dass er von einer statischen nicht auf eine nicht statische zugreifen kann. Hier meine changePic()
Java:
public void changePic(String a) throws IOException{
//			effekt = a;
//			pics  = Toolkit.getDefaultToolkit().getImage(a);
			File datei = new File( a );
			Image image = ImageIO.read( datei );
			setChanged();
			notifyObservers();
			npic();
			
		}


Nein mein ich nicht
Java:
public class Model extends Observable {
    public Image pic;
    public static String effekt;
    public static boolean newpic;
    public String filters;
    
    public static boolean npic(){   
        return newpic;
    }
    
    
        public void changePic(String a){
            effekt = a;
            pic  = Toolkit.getDefaultToolkit().getImage(a);
            setChanged();
            notifyObservers();
            
        }}
ein einfacher getter von pic reicht doch?!? getPic eben
 

elochai

Mitglied
Java:
public void update(Observable o, java.lang.Object obj) {
Model m = (Model) o;
olym.setIcon(Model.getPic());

}
so sieht jetzt meine update aus und so sieht der Teil meiner Model aus
Java:
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Observable;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

public class Model extends Observable {
	public static Image pics;
	public static String effekt;
	public static boolean newpic;
	public String filters;
	static Image image;
	public static boolean npic(){	
		return newpic;
	}
	
	public static  Image getPic(){
		return image;
		
	}
	
	
	
		public void changePic(String a) throws IOException{
//			effekt = a;
//			pics  = Toolkit.getDefaultToolkit().getImage(a);
			File datei = new File( a );
			this.image = ImageIO.read( datei );
			
			setChanged();
			notifyObservers();
			npic();
			
		}
für setIcon caste ich das Image dann zu Icon. Wenn ich das Prog dann ausführe kommt aber, wenn ich auf den "Open" Button klick ein "unknown source" Fehler bzw. BufferedImage cannot be cast to Icon. Liegt das an der read() methode?
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Java:
public void update(Observable o, java.lang.Object obj) {
Model m = (Model) o;
olym.setIcon(Model.getPic());

}
Die Methode getPic() bitte nicht static machen und auch nicht an der Klasse, sondern an der jeweiligen Instanz aufrufen:
Java:
Model m = (Model) o;
olym.setIcon(m.getPic());
Ich nehme mal an das olym eine Referenz auf des JLabel enthält.
 

elochai

Mitglied
Ok. Also die update sieht jetzt so aus wie von dir beschrieben und die Model so:
Java:
 public class Model extends Observable {
	public  Image pics;
	public static String effekt;
	public static boolean newpic;
	public String filters;
	 Image image;
	public static boolean npic(){	
		return newpic;
	}
	
	public  Icon getPic(){
		Icon im = (Icon) image;
		
		return im;
		
	}
	
		public void changePic(String a) throws IOException{
//			effekt = a;
//			pics  = Toolkit.getDefaultToolkit().getImage(a);
			File datei = new File( a );
			this.image = ImageIO.read( datei );
			
			setChanged();
			notifyObservers();
			npic();
			
		}
es kommt aber beim öffnen Versuch immer der Fehler, dass man nicht von BufferedImage zu Icon casten kann
 

elochai

Mitglied
Juhu. Endlich ein Erfolgserlebnis ;) Danke Jetzt hab ich aber ein neues Problem und zwat erstreckt sich das Pic jetzt über das ganze Frame und verdeckt meine Editleiste am unteren Bildrand. Woran kann das liegen? Hier mal der Code der ganzen View zur Hilfe :
Java:
package Blatt1;

import javax.swing.*;

import org.omg.CORBA.Object;

import java.awt.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Observable;
import java.util.Observer;

public class View extends JFrame implements Observer {

    JPanel contentAll = new JPanel();
    JPanel menueleiste = new JPanel();
    JPanel screen = new JPanel();
    JPanel effects = new JPanel();
    JPanel customize = new JPanel();
	JLabel orig = new JLabel("Original");
	JLabel prev = new JLabel("Preview");
	String effekte = "";
	//String bild = "http://www.blacksins.de/sites/default/files/band_bilder/disturbed.jpg";
	JLabel olym;
	JLabel olym2;
	JTextField filter;
    public View(Controller mainController,String pic,String[] filt) {
    
    	
    this.setTitle("Medientechnik - " + "olympiazentrum.png");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    contentAll.setLayout(new BorderLayout());
    menueleiste.setLayout(new FlowLayout());
    screen.setLayout(new GridBagLayout());
    customize.setLayout(new FlowLayout());
    effects.setLayout(new BorderLayout());
	GridBagConstraints c = new GridBagConstraints();
	orig.setLayout(new BorderLayout());
	orig.setLayout(new BorderLayout());
        
	for(int i = 0; i<filt.length;i++){
		effekte = effekte + filt[i];
	}
	
    try {
    	
      ImageIcon olymp = new ImageIcon (""+pic);
      
      ImageIcon olymp2 = new ImageIcon(""+pic);
     
      float h= (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
      float w= (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
      float olymp_h= olymp.getIconHeight();
      float olymp_w= olymp.getIconWidth();
      //Berrechnet das Seitenverhältniss des Bildes fuer die Skalierung,im if-Fall. Double für praezisere Angaben
      float olymp_verh = olymp_w/olymp_h;
      float pic_resized_h = h/2;
      float pic_resized_w = (h/2)*olymp_verh;
      int res_w = (int) pic_resized_w;
      int res_h = (int) pic_resized_h;
      
      if(olymp_h>h || olymp_w >w/2){
      olymp.setImage(olymp.getImage().getScaledInstance(res_w,res_h,Image.SCALE_FAST)); 
      olymp2.setImage(olymp2.getImage().getScaledInstance(res_w,res_h,Image.SCALE_FAST));} 
      
      else {
          olymp.setImage(olymp.getImage().getScaledInstance((int)olymp_w,(int)olymp_h,Image.SCALE_FAST)); 
          olymp2.setImage(olymp2.getImage().getScaledInstance((int)olymp_w,(int)olymp_h,Image.SCALE_FAST));} 
      
      
     this.olym = new JLabel(olymp);
    this.olym2 = new JLabel(olymp2);
   
    c.gridx = 0;
    c.gridy= 0;
    c.gridwidth=3;
    screen.add(olym,c);
    
    c.gridx= 3;
    c.gridy=0;
    c.gridwidth=3;
    screen.add(olym2,c);
    
    c.gridx=2;
    c.gridy=1;
    screen.add(orig,c);
    
    c.gridx=4;
    c.gridy=1;
    screen.add(prev,c);
    
    } catch (NullPointerException e) {
          e.printStackTrace();
    }

    JMenuBar menuBar = new JMenuBar();
    JMenu file = new JMenu("File");
    JMenu filters = new JMenu("Filters");
    JMenu about = new JMenu("About");
    JMenuItem loadfile = new JMenuItem("Load File");
    JMenuItem exit = new JMenuItem("Exit");
    JMenuItem aboutMedientechnik = new JMenuItem("About Medientechnik");
    JCheckBoxMenuItem blur = new JCheckBoxMenuItem("Blur");
    JCheckBoxMenuItem disort = new JCheckBoxMenuItem("Disort");
    JCheckBoxMenuItem sharpen = new JCheckBoxMenuItem("Sharpen");
    JCheckBoxMenuItem contrast = new JCheckBoxMenuItem("Contrast");
    JRadioButton allEffects = new JRadioButton("Alle Effekte");
    allEffects.setActionCommand("Alle Effekte");
    allEffects.addActionListener(mainController);
    this.filter = new JTextField(effekte);
    JButton random = new JButton("Random");
    random.setActionCommand("Random");
    random.addActionListener(mainController);
    JSeparator separator = new JSeparator();
    
    blur.setState(false);
    disort.setState(false);
    sharpen.setState(false);
    contrast.setState(false);
   
    filters.add(blur);
    blur.setActionCommand("blur");
    blur.addActionListener(mainController);
    filters.add(disort);
    disort.setActionCommand("disort");
    disort.addActionListener(mainController);
    filters.add(sharpen);
    sharpen.setActionCommand("sharpen");
    sharpen.addActionListener(mainController);
    filters.add(contrast);
    contrast.setActionCommand("contrast");
    contrast.addActionListener(mainController);
    file.add(loadfile);
    loadfile.setActionCommand("Load File");
    loadfile.addActionListener(mainController);
    file.add(exit);
    exit.setActionCommand("Exit");
    exit.addActionListener(mainController);
    
    filters.add(filters);
    menuBar.add(file);
    menuBar.add(filters);
    menuBar.add(about);
    about.add(aboutMedientechnik);
    aboutMedientechnik.setActionCommand("About Medientechnik");
    aboutMedientechnik.addActionListener(mainController);  

    customize.add(allEffects, FlowLayout.LEFT);
    customize.add(random, FlowLayout.CENTER);
    customize.add(filter, FlowLayout.RIGHT);
    customize.add(new JLabel("Filters: "), FlowLayout.RIGHT);
    effects.add(separator, BorderLayout.NORTH);
    effects.add(customize, BorderLayout.SOUTH);
    
    contentAll.add(screen, BorderLayout.NORTH);
    contentAll.add(effects, BorderLayout.SOUTH);

    this.setJMenuBar(menuBar);
    this.setContentPane(contentAll);
    this.setResizable(false);
    this.pack();
    this.setVisible(true);
    
  }

@Override
public void update(Observable o, java.lang.Object obj) {
Model m = (Model) o;
olym.setIcon(m.getPic());

olym2.setIcon(m.getPic());
filter.setText(m.filters);

}

  
}

hab gesehn er resized die Bilder nicht. Jetzt muss ich das auch noch i-wie in die Update bekommen oder?
 
Zuletzt bearbeitet:

elochai

Mitglied
Das resize Problem konnte ich jetzt lösen, ABER jetzt hab ich ein anderes Problem. Und zwar kann ich alle andere Aktionen des Programms( zum Beispiel das Einblenden eins Infofensters) erst ausführen, nachdem ich ein Bild geladen habe. Vorher bekomm ich eine NullPointerException. Wieso ist das so?????:L
 

elochai

Mitglied
ok. Das funktioniert jetzt. Ich habe jetzt noch ein letztes Problem. Wäre super wenn ihr mir da helfen könntet. Ich will dafür nicht extra n neues Thema aufmachen ;)
Und zwar hab ich diverse Buttons und ein Textfeld. In dem Textfeld soll erscheinen, was welcher von den Buttons aktiv ist. Soweit kein Problem. Aber wie bekomm ich das aus dem Textfeld wieder raus, wenn ich die Buttons wieder deaktiviere?`Wahrscheinlich muss die actionListener überprüfen ob getState() von den Buttons true ist. Aber wie kann ich von der Controller aus einen Wert in meiner View überprüfen?
 

Michael...

Top Contributor
In dem Textfeld soll erscheinen, was welcher von den Buttons aktiv ist. Soweit kein Problem. Aber wie bekomm ich das aus dem Textfeld wieder raus, wenn ich die Buttons wieder deaktiviere?`Wahrscheinlich muss die actionListener überprüfen ob getState() von den Buttons true ist.
Die Info welcher Button (nehme mal an RadioButton) aktiv ist, kannst Du im Textfeld anzeigen lassen und wenn sie deaktiviert sind nicht?? Du reagierst doch sicherlich mit einem Listener auf den Statuswechsel - also sowohl beim Aktivieren als auch beim Deaktivieren?
Aber wie kann ich von der Controller aus einen Wert in meiner View überprüfen?
Hört sich für mich so an, dass Du das MVC noch nicht wirklich verstanden hast: Lesen, Lesen, Lesen ;-)

Wenn das eine reine View interne Sache ist, ist der Weg über den Controller sowieso unnötig, wenn nicht sogar falsch.
 

elochai

Mitglied
sorry. Das war eine bischen blöde Frage, ja. Aber jetzt bin ich fast fertig . Jetzt müsste ich nur noch wissen, wie ich dem Programm sagen kann, dass es bei dem Aufruf einer Methode zuerst wartet bis diese Methode ausgeführt ist bevor es weitermacht, denn im nächsten Schritt änder ich die Werte welche ich für die Methode brauch. Bitte sagt mir, dass dies ohne Thread geht :)
 

Michael...

Top Contributor
Jetzt müsste ich nur noch wissen, wie ich dem Programm sagen kann, dass es bei dem Aufruf einer Methode zuerst wartet bis diese Methode ausgeführt ist bevor es weitermacht, denn im nächsten Schritt änder ich die Werte welche ich für die Methode brauch,
Eventuell verstehe ich die Frage falsch. Code wird immer sequentiell abgearbeitet, sofern er im selben Thread ausgeführt wird.
Wenn eine Methode ausgeführt wird, wird diese gundsätzlich zuerst abgearbeitet, bevor zum nächsten Schritt übergegangen wird.
 

elochai

Mitglied
Das hab ich auch gedacht. Aber ich habe
Java:
public void activatingAllEffects(){
		activatedFiltersCheck();
		filters[0]="Blur ";
		filters[1]="Disort ";
		filters[2]="Sharpen ";
		filters[3]="Contrast ";
		mainModel.filters(filters);
		mainView.blur.setState(true);
		mainView.disort.setState(true);
		mainView.sharpen.setState(true);
		mainView.contrast.setState(true);
	}
die activatedFiltersCheck() testet ob die 4 Buttons gerade aktiviert sind und bildet ein boolean Array.Für die Überprüfung checkt es ein Stringarray in welches der Name des Buttons eingetragen wurde, falls er gerade aktiv ist. Wenn ich dann in einem der Schritte nach der activatedFiltersCheck() den String ändere( welche den Wert im Strinarray ändert mit dem acitvatedFiltersCheck arbeitet), dann ist die Adresse immernoch false, wenn ich sie aufrufe. Ohne Veränderung ist alles true. Obwohl ich dass Array mit 4x false initialisiert habe. Logikfehler?
 

elochai

Mitglied
ich habe mir jetzt mal jedes mal. bevor ich die Werte in dem Array änder, einen Wert davon ausdrucken lassen, also:
Java:
public void activatingAllEffects(){
		activatedFiltersCheck();
		System.out.println(""+filters[0]);
		filters[0]="Blurj ";
		filters[1]="Disort ";
		filters[2]="Sharpen ";
		filters[3]="Contrast ";
		mainView.blur.setState(true);
		mainView.disort.setState(true);
		mainView.sharpen.setState(true);
		mainView.contrast.setState(true);
		mainModel.filters(filters);}
filters ist initialisiert mit String[] filters= {"","","",""}.
So. Dennoch druck das Programm mir "Blurj " aus. Egal wie ich filters[0] veränder nach der sysout methode, er druck mir den Wert aus, der erst nach dem sysout Aufruf gesetzt wurde. Also läuft dass doch nicht ganz sequentiell oder??
 

Michael...

Top Contributor
Anhand des Codes kann man nicht viel sagen. Sieht aber für das was Du vermutlich vorhast recht merkwürdig aus. Du willst doch nur den Status von bestimmten Objekten überprüfen und daraus entsprechende Aktionen ableiten?

Definitiv wird Code (sofern im selben Thread) Zeile für Zeile abgearbeitet. Lass das Programm doch mal im Debug Modus durchlaufen, dann siehst Du wie und was im Code passiert.
 

elochai

Mitglied
Warum merkwürdig? Ich speicher die vorherigen Werte in einem boolean Array bevor ich sie veränder. Und später ersetze ich sie wieder durch die gespeicherten Werte. Wie könnte ich das besser machen?
 

Michael...

Top Contributor
Naja, ich versteh nicht wirklich was Du damit bezweckst. Hat das noch was mit der ursprünglichen Fragestellung zu tun?
Und zwar hab ich diverse Buttons und ein Textfeld. In dem Textfeld soll erscheinen, was welcher von den Buttons aktiv ist. Soweit kein Problem. Aber wie bekomm ich das aus dem Textfeld wieder raus, wenn ich die Buttons wieder deaktiviere?
 

elochai

Mitglied
Also ich habe ein Textfeld, in dem die Namen der aktivierten Buttons erscheint. Wenn ich nun den Button drücke um alle Buttons zu aktivieren und somit alle im textfeld anzuzeigen, dann soll er die buttons speichern, welche vorher schon aktiviert waren um diese nachdem deaktivieren des "alleButtons"-Button diese weiterhin aktiv zu lassen und im Textfeld anzuzeigen.
Das hat zwar nichts mehr mit der ursprünglichen Fragestellung zu tun aber, wie oben beschrieben, wollte ich dafür nicht einen extra Thread eröffnen ;)
 

Michael...

Top Contributor
Und deshalb das String Array? Nimm doch einfach ein boolean Array. Weiss zwar immer noch nicht von welchen Buttons Du redest. Aber die Buttons würde ich dann ebenfalls in ein Array stecken.

Prinzipiell:
Code:
Button[] button = new WasAuchImmerFuerEinButton[4];
boolean[] buttonStatus = new boolean[button.length];
...
//"Aktiviere Alle - Button" wird gedrückt
for (int i=0; i<button.length; i++)
     buttonStatus[i] = button[i].istAktivOderSelektiert();
aktualisiereTextFeld();
...
//"Aktiviere Alle - Button" wird deaktivier
for (int i=0; i<button.length; i++)
    button[i].setAktiv(buttonStatus[i];
aktualisiereTextFeld();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Verständnisfragen im Umgang mit update() und JFrames AWT, Swing, JavaFX & SWT 5
E JavaFX Umgang mit SVG-Dateien AWT, Swing, JavaFX & SWT 0
I Umgang mit vielen Objekten AWT, Swing, JavaFX & SWT 3
perlenfischer1984 Umgang mit IDs bei dynamischen Tab AWT, Swing, JavaFX & SWT 1
Meeresgott Swing Umgang mit JPanel AWT, Swing, JavaFX & SWT 4
A Swing JTable Umgang mit Zellen AWT, Swing, JavaFX & SWT 2
G Prinzipelles zum Umgang von Klassen untereinander AWT, Swing, JavaFX & SWT 4
A Richtiger Umgang mit jProgressBar AWT, Swing, JavaFX & SWT 2
T ProgressBox - Update AWT, Swing, JavaFX & SWT 9
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
G update, paintComponent AWT, Swing, JavaFX & SWT 1
T GUI Update /EDT AWT, Swing, JavaFX & SWT 7
izoards JavaFX Concurrency Update UI AWT, Swing, JavaFX & SWT 35
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
J TableView Update/Refresh CPU AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
blazingblade JavaFX Tableview Clock Column update AWT, Swing, JavaFX & SWT 5
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
M JavaFX ComboBox: Update zur Laufzeit AWT, Swing, JavaFX & SWT 16
W Swing ProgressBar update AWT, Swing, JavaFX & SWT 4
B IconImage update im Tabbedpane AWT, Swing, JavaFX & SWT 3
M Update überschreiben klappt nicht AWT, Swing, JavaFX & SWT 4
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
M "Update" der JTable funktioniert nicht AWT, Swing, JavaFX & SWT 2
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
V Swing Update Textarea AWT, Swing, JavaFX & SWT 2
T Event Handling JFreeChart Update AWT, Swing, JavaFX & SWT 2
Farbtopf Live update JFreeChart AWT, Swing, JavaFX & SWT 3
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
El_Lobo Swing bei Update von Graphik Koordinatensystem nicht jedesmal neu zeichnen AWT, Swing, JavaFX & SWT 2
M Update JPanel AWT, Swing, JavaFX & SWT 12
N update model nach dem filtern AWT, Swing, JavaFX & SWT 2
E Swing Update JTable AWT, Swing, JavaFX & SWT 6
L Update JTree Verzeichnisse AWT, Swing, JavaFX & SWT 9
G Swing Update-Funktion für Swing-Anwendung AWT, Swing, JavaFX & SWT 5
E Swing JTextField Listener nach Update?! AWT, Swing, JavaFX & SWT 2
D Swing JTable Problem bei automatischem update von Zellen AWT, Swing, JavaFX & SWT 3
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
D Swing update eines Labels nicht sichtbar AWT, Swing, JavaFX & SWT 9
N Tablle nach SQL-Update neu Laden AWT, Swing, JavaFX & SWT 4
M SWT grabExcessHorizontalSpace update ? refresh ? AWT, Swing, JavaFX & SWT 6
P Observer und GUI Update AWT, Swing, JavaFX & SWT 2
w0ddes Swing Update: Laufendes GUI updaten AWT, Swing, JavaFX & SWT 8
D JTable während edit kein update machen lassen AWT, Swing, JavaFX & SWT 2
M Swing Kein update bei simulierten HTML-Link AWT, Swing, JavaFX & SWT 4
C SWT Shell update probleme - Mausbewegung nötig AWT, Swing, JavaFX & SWT 2
hdi Swing GUI update vs. Process Speed AWT, Swing, JavaFX & SWT 31
hdi Swing Gui Update Problem (EDT) AWT, Swing, JavaFX & SWT 6
C JList update über tabbedPane? AWT, Swing, JavaFX & SWT 18
M Update einer JTEextArea AWT, Swing, JavaFX & SWT 2
H JTable mySQL Update AWT, Swing, JavaFX & SWT 8
S Update des fensters beim Ersetzen von JPanels AWT, Swing, JavaFX & SWT 9
G Features nach Update löschen AWT, Swing, JavaFX & SWT 2
J Fragen zur Vererbung und Update AWT, Swing, JavaFX & SWT 12
B Update von JLabels AWT, Swing, JavaFX & SWT 2
C Habe Probleme beim Bild laden! *Update 30.11.2006* AWT, Swing, JavaFX & SWT 28
C JTreeTable update Problem AWT, Swing, JavaFX & SWT 4
S Probleme mit dem Update einer JList AWT, Swing, JavaFX & SWT 7
B View zeichnet Daten aus dem Model ohne Update AWT, Swing, JavaFX & SWT 4
A Update von Frameinhalt und Scrollbar AWT, Swing, JavaFX & SWT 11
F MVC: Update von View und Controller AWT, Swing, JavaFX & SWT 5
C JTable update: Selektion beibehalten AWT, Swing, JavaFX & SWT 12
P paintComponent /paint/ update/ offscreenImage / Graphics2D / AWT, Swing, JavaFX & SWT 4
S JMenuBar + update AWT, Swing, JavaFX & SWT 3
G JTree - ungültiger selection update AWT, Swing, JavaFX & SWT 2
G Problem mit JLabel Update AWT, Swing, JavaFX & SWT 3
C [JTable] Update der Datenbank AWT, Swing, JavaFX & SWT 6
N update()-Methode für Canvas AWT, Swing, JavaFX & SWT 9
A problem mit update nach event, JSplitpane spinnt AWT, Swing, JavaFX & SWT 2
S Update von Grafik auf JPanel AWT, Swing, JavaFX & SWT 2
M GUI Update während der Verarbeitung einer Methode AWT, Swing, JavaFX & SWT 3
M update JTable AWT, Swing, JavaFX & SWT 3
T Problem bei Update von JTables in JTabbedPane AWT, Swing, JavaFX & SWT 2
D Problem beim Update von unsichtbaren JComponents mit Timern AWT, Swing, JavaFX & SWT 5
D Swing: GUI-Update-Problem AWT, Swing, JavaFX & SWT 3
J Warum funktioniert das Update des UI nicht? AWT, Swing, JavaFX & SWT 8
I GUI-Update-Probleme AWT, Swing, JavaFX & SWT 2
G Update von JPanel nach Buttonbetätigung AWT, Swing, JavaFX & SWT 1
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
M passende Reflexion-Methode?? AWT, Swing, JavaFX & SWT 1
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
M Swing Methode datenLesen() greift auf catchBlock zu? AWT, Swing, JavaFX & SWT 25
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
U was bewirkt die methode fill und unterschied zu anderen fill Methoden in 2dgraphics? (Java)? AWT, Swing, JavaFX & SWT 6
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
Z Methode bei Boolean change neu Ausführen AWT, Swing, JavaFX & SWT 9
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
J Rekursive Methode JProgressBar AWT, Swing, JavaFX & SWT 4
A Methode pausieren bis anderes Ereignis ausgeführt AWT, Swing, JavaFX & SWT 2
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben