setIcon

ballibum

Aktives Mitglied
Hallo Forum,
auch wenn ich wahrscheinlich nicht ganz sauber programmiert habe, müsste aus meiner Sicht einiges dennoch klappen. Ich habe eine Funktion mit der ich eine Oberfläche erzeuge. Diese besitzt zwei Buttons.
Bei einem Button soll ein Icon gesetzt werden, solange eine Funktion läuft.
Doch leider wird kein Button gesetzt.
Hier die Funktion:

Java:
//Buttons zum Starten, Abbrechen und Pausieren der Simulation
		btnStart.setBounds(10,365,180,75);
		btnStart.addActionListener(new ButtonStart());
		
		JButton btnAbbruch = new JButton();
		btnAbbruch.setText("Abbruch");
		btnAbbruch.setBounds(10,455,180,75);
		btnAbbruch.addActionListener(new ActionListener()
		{
			public void actionPerformed( ActionEvent e )
			{
				System.out.println(sysInfo.getImagepfad()+"loadinfo.gif");
				btnStart.setIcon(new ImageIcon(sysInfo.getImagepfad()+"loadinfo.gif"));//FUnktioniert super!!!!!!!!!!!
				btnStart.setText("Start");
				btnStart.setEnabled(true);
			}
		});

Doch dort wo das Icon wirklich gesetzt werden soll, gelingt es mir einfach nicht, obwohl alle anderen Buttonmanipulationen funktionieren:

Java:
class ButtonStart implements ActionListener
    {
          @Override
          public void actionPerformed(ActionEvent e)
          {
                new Thread (new Runnable()
                {
                      @Override
                      public void run()
                      {
                           btnStart.setText("");
                           //progressBar.setValue(progressBar.getMinimum());
                           System.out.println(sysInfo.getImagepfad()+"loadinfo.gif");
                           btnStart.setIcon(new ImageIcon(sysInfo.getImagepfad()+"loadinfo.gif"));//Hier funktioniert nichts, es wird kein Image angezeigt
                           textArea.append("gestartet\n");
                           btnStart.setEnabled(false);
                           new Start().start(textArea);
                           SwingUtilities.invokeLater(new Runnable()
                           {
                                 @Override
                                 public void run()
                                 {
                                       textArea.append("beendet\n");
                                       btnStart.setIcon(null);
                                       btnStart.setText("Start");
                                       btnStart.setEnabled(true);
                                 }
                           });
                      }
                }).start();
               
          }
         
    }
 
Zuletzt bearbeitet von einem Moderator:

ballibum

Aktives Mitglied
Ich rufe die class ja in einer Klasse auf. Daher funktionieren auch die Funktionen btnstart.setText(""); und btnStart.setEditable(), aber eben nicht das setIcon().
mfg
Balli
 

Robokopp

Bekanntes Mitglied
Kann es sein, dass der Übergang von hier:
Java:
 btnStart.setIcon(new ImageIcon(sysInfo.getImagepfad()+"loadinfo.gif"));

nach hier:


Java:
btnStart.setIcon(null);

Einfach so schnell stattfindet, dass man das Icon garnicht sehen kann bevor es schon wieder auf Null gesetzt wurde?

Nur eine Vermutung
 

ballibum

Aktives Mitglied
Das Problem liegt daran:

Java:
btnStart.setIcon(new ImageIcon(sysInfo.getImagepfad()+"loadinfo.gif"));
                           textArea.append("gestartet\n");
                           btnStart.setEnabled(false); //Wenn diese Funktion auskommentiert ist dann läuft alles
 

ballibum

Aktives Mitglied
Hi, vielen Dank für deine Antwort.
Das Ändern des Textes und das wieder Bereitstellen des Buttons wird ja auch erst nach Abarbeitung von new Start().start(textarea) ausgeführt? Und ja die Berechnungen finden im Konstruktor statt. Ist eine Verarbeitung von zwei Dateien, deren Umfang etwas größer ist.
mit freundlichem Gruß
Balli
 
Zuletzt bearbeitet:

ballibum

Aktives Mitglied
ja, aber nicht sofort sondern, erst nach etwa 15 Minuten (um es zeitlich auszudrücken).

Das was mich am meisten verwundert ist, dass es funktioniert sobald ich das btnStart.setEditable() auf true setze.

mfg
Balli
 

bERt0r

Top Contributor
Moment mal. Ein JButton besitzt keine setEditable Funktion. Ausserdem gibts für einen Button mehrere Icons: Ein PressedIcon, ein diabledIcon, ein rolloverIcon, ein selectedIcon und noch mehr...
 
Zuletzt bearbeitet:

ballibum

Aktives Mitglied
Hi, du hast natürlich vollkommen recht. Ich nutze ja auch
Java:
btnStart.setEnabled(true)

Es ist dennoch merkwürdig
 

ballibum

Aktives Mitglied
Ich würde gerne nochmal das Prinzip mit dem DisabledIcon aufgreifen. Würde das in der Theorie so funktionieren:


Java:
JButton jBtn = new JButton ();
jBtn.setText("start");
ImageIcon icon = new ImageIcon("irgendein Pfad zum Icon");
jBtn.setDisabledIcon(icon);
jBtn.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
          {
                new Thread (new Runnable()
                {
                      @Override
                      public void run()
                      {
                    	   new AusbreitungsStart().simulationsstart(textArea,treemodel);
                           jBtn.setDisable();  
                           
                           SwingUtilities.invokeLater(new Runnable()
                           {
                                 @Override
                                 public void run()
                                 {
                                       jBtn.setEnable(true);
                                 }
                           });
                      }
                }).start();
            }
		});

Oder habe ich das jetzt Falsch verstanden?

mfg
Balli
 

Ähnliche Java Themen


Oben