FileChooser Layout - Threads?

Status
Nicht offen für weitere Antworten.

ulr!ch

Bekanntes Mitglied
Hi JavaGemeinde,

ich habe ein Dateiauswahlmenü, in dem man eine oder mehrere Dateien auswählen kann, die dann "ausgewertet" werden. Einige Daten werden in einer Tabelle angezeigt, wieder andere werden zwischengespeichert usw.
Während der "Auswertung", die eine gewisse, schwer abzuschätzende Zeit dauert, wird an der Stelle, an der zuvor der Kasten für die Dateiauswahl war, ein unerwünschter grauer Hintergrund angezeigt. Das sieht stümperhaft aus, was es ja auch ist. :)
Wie kann ich das verhindern, dass die GUI erst nach der Auswertung upgedatet wird?
Muss ich da mit Threads arbeiten?

By<e Ulrich
 

Mag1c

Top Contributor
Jawoll,

du DARFST mit Threads arbeiten. Etwas mehr Freude bitte, Threads sind was feines ;)

Gruß
Mag1c
 

ulr!ch

Bekanntes Mitglied
Jaja, was ganz Feines. :)
Also wenn ich das richtig verstanden habe, dann muss man die Berechnung/ Auswertung von der GUI trennen. Aber ich kann mir das ehrlich gesagt nicht ganz vorstellen. Sagen wir mal - der Einfachheit halber - ich implementiere eine JProgressBar über ( progressBar.setIndeterminate(true); ).
Also das Layout soll solange einen hin- und hersausenden Balken zeigen, bis
Code:
public class A extends JFrame implements runnable {
 public A() {
 }

 public void run() {
// solange Klasse B (wie Berechnung) nicht fertig ist, zeige die JProgressBar an
// hier also nur die GUI?
 }

 public B {
// eigentlichen Berechnungen
 }
}
Das stimmt so vom Aufbau nicht, oder?
Ich habe zwar den Thread zu JProgressBar in der FAQ gelesen, habe aber mit dem Aufbau Schwierigkeiten.
Vielleicht kann mir jemand die Struktur s. o. verdeutlichen.

Thx!

By<e Ulrich
 

Mag1c

Top Contributor
Naja,

noch nicht so richtig:

Code:
public class A extends JFrame {
    ...
    // ProgressBar erzeugen
    // Thread erzeugen und starten
}

public class B implements Runnable {
    public B (JProgressBar pb) {
        ...
    }

    public void run () {
        // hier rechnen und ProgressBar aktualisieren
    }
}

Gruß
Mag1c
 

ulr!ch

Bekanntes Mitglied
Mag1c hat gesagt.:
Naja,

noch nicht so richtig:

Code:
public class A extends JFrame {
    ...
    // ProgressBar erzeugen
    // Thread erzeugen und starten
}

Super, danke schon einmal, aber ich habe natürlich noch Fragen. :)
Muss bei Klasse A nicht auch "implements Runnable" stehen, sonst kann ich doch keinen Thread erzeugen und starten? Hoffentlich klappt das. Aber das man GUI und Berechnungen trennt - das ist schon mal der richtige Weg?

By<e Ulrich
 

Mag1c

Top Contributor
Moin,

es gibt viele Möglichkeiten, wie man das umsetzen kann. Das da oben ist nur ein Beispiel. Das Runnable mußt du dort implementieren, wo du etwas durch einen Thread ausführen lassen willst. Bei der Erzeugung des Threads mußt du dann eine Instanz des Runnable an den Thread übergeben:

new Thread(new B(progress)).start();

Und ja, natürlich ist das eine gute Idee, die GUI von der Berechnung zu trennen (vorausgesetzt, daß die beiden Dinge nicht zu stark miteinander verkoppelt sind).

Gruß
Mag1c
 

ulr!ch

Bekanntes Mitglied
Hi JavaGemeinde,

bin langsam am Ausrasten. :(
Habe nun das Beispiel in der FAQ versucht "zu adaptieren", aber selbst in seiner ursprünglichen Version bekomme ich immer die Fehlermeldung:
java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread

Hier mal der eigentliche Quellcode:
Code:
package Auswertung;

import java.io.*;
import java.lang.reflect.*;

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

import org.jfree.ui.*;
import Methoden.*;
import MyComponents.*;

public class Exportieren extends JFrame implements Runnable {
 /** Der Algorithmus, der ausgeführt werden soll */
 private Algorithmus algorithmus;
/** Der Fortschrittsbalken */
 private JProgressBar progress;
/** Verschiedene Knöpfe um den Algorithmus zu steuern */
 private JButton buttonStart, buttonStop;

  public Exportieren(int t, int azm, FileManagement ergebnis,
		     JPanel HG, JPanel inner_layer) {
    this.t = t;
    this.azm = azm;
    this.ergebnis = ergebnis;
    this.HG = HG;
    this.innerLayer = inner_layer;

    {
      try {
	jbInit();
      }
      catch (Exception e) {
	e.printStackTrace();
      }
    }
  }

  public void jbInit() throws Exception {
    innerLayer.setVisible(false);
    innerLayer.removeAll();
    innerLayer.setVisible(true);
    innerLayer.setBackground(new MyColor("weiss").getMyColor());

    progress = new JProgressBar();
    buttonStart = new JButton( "Start" );
    buttonStop = new JButton( "Stop" );
    algorithmus = new Algorithmus();

// Wenn der Algo nicht läuft, kann man ihn auch nicht stoppen
    buttonStop.setEnabled( false );

// Der folgende Teil ist nur für das Auge, eine Benutzeroberfläche die
// etwas dynamisch ist, kommt immer gut an.
   JPanel panel = new JPanel( new GridLayout( 1, 2 ));
   panel.add( buttonStart );
   panel.add( buttonStop );

   innerLayer.add( progress, new GridBagConstraints( 0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets( 2, 2, 2, 2 ), 0, 0) );
   innerLayer.add( panel, new GridBagConstraints( 0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.SOUTHEAST, GridBagConstraints.NONE, new Insets( 2, 2, 2, 2 ), 0, 0) );      
   HG.add(innerLayer, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
   HG.updateUI();

// Die Buttons sollen ja auch reagieren können
   buttonStart.addActionListener( new ActionListener(){
   public void actionPerformed(ActionEvent e) {
      start();
   }
});

buttonStop.addActionListener( new ActionListener(){
   public void actionPerformed(ActionEvent e) {
      stop();
   }
});

   setDefaultCloseOperation( EXIT_ON_CLOSE );
  }

 /**
     * Startet den Algorithmus, das Verhalten ist nicht definiert, wenn der
     * Algorithmus bereits aktiviert wurde.
     */
    protected void start(){
       buttonStart.setEnabled( false );
 
       // Einen neuen Thread herstellen, und starten.
       new Thread( this ).start();
 
       buttonStop.setEnabled( true );
    }
 
    /**
     * Stoppt den Algorithmus, immer unter der Annahme, dass er zurzeit
     * läuft.
     */
    protected void stop(){
       buttonStop.setEnabled( false );
       algorithmus.setInterrupted( true );
    }
 
    /**
     * Die Methode wird aus einem Zusatzthread aufgerufen. Sie startet
     * den Algorithmus, und sorgt nach seiner Beendigung dafür, dass das
     * Fenster weiterhin schön aussieht
     */
    public void run(){
       // Zurzeit ist der Algorithmus nicht unterbrochen
       algorithmus.setInterrupted( false );
 
       // Den Algorithmus starten. Die Methode kehrt erst zurück, wenn der
       // Algo abgearbeitet oder unterbrochen wurde.
       algorithmus.run( progress );
 
       if( algorithmus.isInterrupted() ){
	  /*
	   * Sollte der Algorithmus abgebrochen worden sein, wird die
	   * Progressbar zurück auf den Startwert gesetzt.
	   *
	   * Die Methode "invokeLater" garantiert, dass dass der Code des
	   * übergebenen Runnable's synchronisiert zum Dispatch-Thread
	   * ausgeführt wird. Dies ist notwendig, weil Swing nicht
	   * threadsicher ist.
	   */
	  SwingUtilities.invokeLater( new Runnable(){
	     public void run(){
		progress.setMinimum( 0 );
		progress.setMaximum( 1 );
		progress.setValue( 0 );
		buttonStart.setEnabled( true );
	     }
	  });
       }
       else{
	  /*
	   * Der Algorithmus wurde korrekt beendet, ein Dialog soll den
	   * Benutzer unterrichten, dass das Programm nun geschlossen wird.
	   *
	   * Die Methode "invokeAndWait" garantiert, dass der Code des
	   * Runnable-Objektes, welches übergeben wird, synchron zum
	   * Dispath-Thread ausgeführt wird. Ausserdem kehrt die Methode
	   * erst dann zurück, wenn eben dieser Code ausgeführt wurde.
	   */
	  try {
	     SwingUtilities.invokeAndWait( new Runnable(){
		public void run(){
		   JOptionPane.showMessageDialog( Exportieren.this,
			 "Algorithmus erfolgreich beendet.", "Beendet",
			 JOptionPane.INFORMATION_MESSAGE );
		}
	     });
	  } catch (InterruptedException e) {
	     // Kann ja sein, das hier was schiefgeht...
	     e.printStackTrace();
	  } catch (InvocationTargetException e) {
	     e.printStackTrace();
	  }
 
	  // Programm beenden, nachdem der Dialog geschlossen wurde
	  System.exit(0);
       }
   }
}

Den zweiten Teil des Codes habe ich in eine externe Klasse gelegt.
Wieso gibt es diese Fehlermeldung? Ich habe die Threads zu diesem Thema im Forum gelesen, jedoch ohne Erfolg.
Ich habe doch nicht verändert. :cry:

Vielleicht kann mir jemand helfen, mag1c?

By<e Ulrich
 

Mag1c

Top Contributor
Hmm,

sehr komisch :roll: Wie gehst du vor bzw. wann kommt der Fehler ? Wie rufst du die Klasse auf ? Was passiert im Algorithmus (insbesondere beim Unterbrechen) ? Ist das exakt der Code, den du ausgeführt hast ?

Gruß
Mag1c
 

ulr!ch

Bekanntes Mitglied
Mag1c hat gesagt.:
sehr komisch :roll:
a) Wie gehst du vor bzw. wann kommt der Fehler ?
b) Wie rufst du die Klasse auf ?
c) Was passiert im Algorithmus (insbesondere beim Unterbrechen) ?
d) Ist das exakt der Code, den du ausgeführt hast ?

Gruß
Mag1c
(Aufzählung eingefügt)

Also, da sind wohl eine ganze Menge Fragen noch nicht beantwortet worden.
zu b) Ich habe eine Menüleiste, wenn ich dort den Menüpunkt "Exportieren" anklicke, dann rufe ich die Klasse so auf:
Code:
Exportieren exportieren = new Exportieren(t, azm, ergebnis, HG, inner_layer);
exportieren.run();

a) Direkt beim Aufrufen der Klasse; ich brauch also nicht noch auf den Start-Knopf drücken.

c) Den Code aus dem FAQ-Bsp habe ich einfach in eine neue Klasse gelegt.
Den entsprechende Stelle ist wohl, weiß nicht, ob du dies meinst.
Code:
while( current <= end && !isInterrupted() ){
	 try{
	    Thread.sleep( 100 ); // Kurz warten
	 }
	 catch( InterruptedException e ){
	 }
	 setValue( current++ ); // Hey! Es ist was passiert!
      }
PS: Funktioniert auch nicht, wenn ich eine Instanz von Thread aufrufe.

d) Ja, es steht sonst nur auskommentiertes Zeug drin.

:roll: Wir stehen selbst enttäuscht und sehr betroffen,
der Vorhang zu und viele Fragen offen.

By<e Ulrich
 

Mag1c

Top Contributor
Hi,

ulr!ch hat gesagt.:
Code:
Exportieren exportieren = new Exportieren(t, azm, ergebnis, HG, inner_layer);
exportieren.run();

Na da haben wir doch gleich den Übeltäter ;) Du rufst das run() aus dem EventDispatch-Thread auf, was normalerweise von einem anderen Thread ausgeführt werden soll. Warum rufst du nicht stattdessen start() auf ? Dann würden auch die Buttons korrekt behandelt ? (Und ich würde start() und stop() noch umbenennen in startAlgo() und stopAlgo() oder so, sonst kommst du noch durcheinander mit Thread#start und Thread#stop).

Gruß
Mag1c
 

ulr!ch

Bekanntes Mitglied
Hi Mag1c,

also ich habe start nach startAlgo und stop nach stopAlgo umbenannt, und rufe nun die Klasse mit:
Code:
    else if (action.equals("Exportieren")) {
      Exportieren exportieren = new Exportieren(t, azm, ergebnis, HG, inner_layer);
      exportieren.startAlgo();;
    }
auf. Dadurch verschwindet - wirklich die Fehlermeldung garndios! :) Auch öffnet sich nach ein gewissen Zeit ein OptionPane und bestätigt, dass der Algorithmus "durchgelaufen" ist, ABER die JProgressBar verändert ihr aussehen leider nicht. :(
Why?

By<e Ulrich
 

ulr!ch

Bekanntes Mitglied
Hi Mag1c,

kann es damit etwas zu tun haben, dass ich den Algorithmus in eine externe Klasse gelegt habe?

By<e Ulrich
 

Mag1c

Top Contributor
Hi,

dann müsstest du doch mal zeigen, was du im Algorithmus mit dem ProgressBar anstellst.

Gruß
Mag1c
 

ulr!ch

Bekanntes Mitglied
Mag1c hat gesagt.:
Hi,

dann müsstest du doch mal zeigen, was du im Algorithmus mit dem ProgressBar anstellst.

Gruß
Mag1c
OK
Code:
package Auswertung;

import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

/**
* Der Algorithmus stellt einige langwierige Berechnungen an, für deren
* Erklärung hier leider keinen Platz gefunden werden kann.
*/
class Algorithmus{
   /**
    * Dieser Fortschrittsbalken wird benutzt, um den Fortschritt des Algos
    * anzuzeigen
    */
   private JProgressBar status;

   /**
    * Dieser Boolean wird auf "true" gesetzt, sollte der Algorithmus
    * abgebrochen werden.
    */
   private boolean interrupted = false;

   public Algorithmus(){
   }

   /**
    * Gibt an, ob der Algorithmus abgebrochen wird, oder wurde.
    * @return true, falls der Algorithmus stoppen soll
    */
   public boolean isInterrupted() {
      return interrupted;
   }

   /**
    * Gibt an, ob der Algorithmus abgebrochen werden soll.
    * @param interrupt true, falls der Algorithmus abgebrochen werden soll,
    *            andernfalls false.
    */
   public void setInterrupted( boolean interrupt ) {
      interrupted = interrupt;
   }

   /**
    * Die Hauptmethode des Algorithmuses, hier geschehen alle wichtigen
    * Berechnungen. Leider konnte die Weltformel hier nicht Platz finden,
    * deshalb beschränkt sich die Methode auf stupides hochzählen eines
    * Integers :-)
    * @param progress Der Fortschrittsbalken, welcher den Fortschritt des Algos
    *            anzeigen wird.
    */
   public void run( JProgressBar progress ) {
      // Den Fortschrittsbalken speichern wir als Instanzvariable. Das
      // hat den Vorteil, dass jede der 1000 Methoden des Algos Zugriff
      // auf die Progressbar hat.
      status = progress;

      int begin = 13;
      int end = 65;
      int current = begin;

      // Minimum und Maximum des Fortschrittbalkens setzen
      setMinMax( begin, end );

      while( current <= end && !isInterrupted() ){
	 try{
	    Thread.sleep( 100 ); // Kurz warten
	 }
	 catch( InterruptedException e ){
	 }
	 setValue( current++ ); // Hey! Es ist was passiert!
      }

      // Instanzvariable auf null setzen, damit der Garbagecollector
      // allenfalls Müll entfernen kann
      status = null;
   }

   /**
    * Setzt die minimalen und die maximalen Werte des Fortschrittbalkens. Die
    * Methode kehrt erst zurück, wenn die Werte tatsächlich gesetzt wurden.
    * @param min Das Minimum
    * @param max Das Maximum
    */
   public void setMinMax( final int min, final int max ) {
      try{
	 /*
	  * Diese Methode wird nicht aus dem Dispatcher-Thread aufgerufen. Da
	  * Swing nicht threadsicher ist, müssen wir für eine Synchronisation
	  * sorgen, deshalb wird hier "invokeAndWait" verwendet.
	  */
	 SwingUtilities.invokeAndWait(new Runnable(){
	    public void run() {
	       status.setMinimum( min );
	       status.setValue( min );
	       status.setMaximum( max );
	    }
	 });
      }
      catch( Exception e ){
      }
   }

   private void setValue( final int value ) {
      /*
       * Der Algorithmus sollte nicht unnötig angehalten werden, nur damit die
       * Progressbar schön aussieht, deshalb "invokeLater". Es kann nun aber
       * passieren, dass der Algorithmus abbricht, nachdem er "setValue"
       * aufgerufen hat (und damit die Variable "status" auf null setzt), das
       * übergebene Runnable aber erst später ausgeführt wird. Aus diesem
       * Grund wird ein try-catch-Block benutzt, der die mögliche
       * NullPointerException abfängt. Alternativ könnte man mit dem Keyword
       * "synchronized" einen Mechanismus bauen, der verhindert dass die
       * Variable "status" verändert wird, während wir uns in dieser Methode
       * befinden (und dann eine einfache if-Abfrage machen).
       */
      SwingUtilities.invokeLater( new Runnable(){
	 public void run() {
	    try{
	       status.setValue( value );
	    }
	    catch( NullPointerException ex ){
	       // silent exception
	    }
	 }
      });
   }
}
[Das ist genau das Bsp. aus der FAQ]
Ich hatte daran gedacht, dass ich vielleicht den Thread an den Algorithmus übergeben müsste, und dann halt in der Exporiteren-Klasse:
Code:
algorithmus = new Algorithmus(Thread.currentThread);
aufrufe, aber ohne Erfolg.
Irgendwie verstehe ich das mit diesen Threads immer noch nicht ganz.

By<e Ulrich
 

Mag1c

Top Contributor
Hi Ulrich,

tja, was soll ich sagen ... bei mir funktioniert dein Code :)

Könnte evtl. an deiner GUI liegen. Ich musste an der Stelle etwas umbauen, damit ich etwas sehe. Wo kommen denn die Parameter für den Exportieren(...)-Konstruktor her ?

Gruß
Mag1c
 

ulr!ch

Bekanntes Mitglied
Ah, isnichwahroder?

Die Parameter für den Konstruktor kommen von der eigentlich Hauptklasse.
Habe nun auch rumexperimentiert, hier ein HG.updateUI(); dort ein anderen LayoutManager eingfügt, aber kein Erfolg.
Was hast du denn noch verändert, damit etwas bei dir angezeigt wird?
Muss ich irgendwo die GUI updaten, eigentich nicht, dafür haben wir ja die Threads programmiert, oder?
Ich finde einfach den verdammten Fehler nicht. :?

By<e Ulrich
 

Mag1c

Top Contributor
Moin,

Code:
    public void jbInit() throws Exception {
          JPanel innerLayer = new JPanel();
          innerLayer.setLayout(new GridBagLayout());
        innerLayer.setBackground(Color.WHITE/*new MyColor("weiss").getMyColor()*/);

        progress = new JProgressBar();
        buttonStart = new JButton( "Start" );
        buttonStop = new JButton( "Stop" );
        algorithmus = new Algorithmus();

//     Wenn der Algo nicht läuft, kann man ihn auch nicht stoppen
        buttonStop.setEnabled( false );

//     Der folgende Teil ist nur für das Auge, eine Benutzeroberfläche die
//     etwas dynamisch ist, kommt immer gut an.
       JPanel panel = new JPanel( new GridLayout( 1, 2 ));
       panel.add( buttonStart );
       panel.add( buttonStop );

       innerLayer.add( progress, new GridBagConstraints( 0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets( 2, 2, 2, 2 ), 0, 0) );
       innerLayer.add( panel, new GridBagConstraints( 0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.SOUTHEAST, GridBagConstraints.NONE, new Insets( 2, 2, 2, 2 ), 0, 0) );
//       HG.add(innerLayer, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
//       HG.updateUI();
       getContentPane().add(innerLayer);
       pack();

die Konstruktor-Parameter habe ich einfach mal ignoriert. Das jbInit habe ich so modifiziert, daß
die GUI dem Frame hinzugefügt wird. Der Aufruf sieht dann ganz simpel so aus:

Code:
       Exportiern exportieren = new Exportiern(0, 0, null, null, null);
        exportieren.setVisible(true);
        exportieren.startAlgo();

Gruß
Mag1c
 

ulr!ch

Bekanntes Mitglied
Hi Mag1c,

vielen Dank für deine Hilfe, ohne dich hätte ich den Fehler nie gefunden. :)
Und toll, dass du den Code bei dir ausprobiert hast und mir so Hinweise liefern konntest.
Also es war eine ganz unglückliche Verkettung von "Spezialeinstellungen":
a) Zum einen benutze ich ein anderes laf ("com.jgoodies.looks.plastic.PlasticXPLookAndFeel").
b) Zum anderen hatte ich Vista Inspirat ausprobiert, um zu schauen, wie der Nachfolger von XP aussieht.

Und dann hat sich dieser Balken hat nicht bewegt.
Zu viel Spielerei wird halt bestraft :!:

Thx Mag1c!
By<e Ulrich
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Swing Zweifarbiges Layout für den Filechooser AWT, Swing, JavaFX & SWT 12
T Fehlermeldungen bei Cancel FileChooser AWT, Swing, JavaFX & SWT 7
Bluedaishi FileChooser.ExtensionFilter AWT, Swing, JavaFX & SWT 4
C FileChooser Save-Dialog zeigt Files nicht an AWT, Swing, JavaFX & SWT 3
GenerationLost JavaFX FileChooser speichern ohne Zieldatei? AWT, Swing, JavaFX & SWT 12
N Swing Filechooser zweifarbig machen AWT, Swing, JavaFX & SWT 33
B FileChooser anpassen AWT, Swing, JavaFX & SWT 2
D Swing FileChooser mit einem neuen Rootordner AWT, Swing, JavaFX & SWT 6
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
N FileWriter mit FileChooser AWT, Swing, JavaFX & SWT 3
D Swing JOptionPane + FileChooser .. Reihenfolge wichtig!? AWT, Swing, JavaFX & SWT 7
M FileChooser Bilder auswählen AWT, Swing, JavaFX & SWT 8
kodela FileChooser mit "absolutem" Root-Verzeichnis öffnen AWT, Swing, JavaFX & SWT 2
L Filechooser File Öffnen AWT, Swing, JavaFX & SWT 4
N FileChooser in View AWT, Swing, JavaFX & SWT 3
E Swing filechooser - nur Netzwerkpfade anzeigen lassen AWT, Swing, JavaFX & SWT 14
H FileChooser und Filter AWT, Swing, JavaFX & SWT 4
F Problem mit Mehrfachauswahl bei Filechooser AWT, Swing, JavaFX & SWT 2
G Fragen zum FileChooser AWT, Swing, JavaFX & SWT 5
G FileChooser Bild Speichern AWT, Swing, JavaFX & SWT 3
G FileChooser AWT, Swing, JavaFX & SWT 5
R filechooser soll sich das Verzeichnis merken AWT, Swing, JavaFX & SWT 2
K Bilddatei mit Filechooser auswählen und anzeigen/impotieren AWT, Swing, JavaFX & SWT 18
G FileChooser - Größe (Dimension) ändern AWT, Swing, JavaFX & SWT 2
V System Look and Feel, FileChooser, Optionen einer jar-Datei AWT, Swing, JavaFX & SWT 10
M bei filechooser.showSaveDialog(null); auf Datein. zugreifen AWT, Swing, JavaFX & SWT 2
D FileChooser der anderen Art. AWT, Swing, JavaFX & SWT 2
C falsche Pfadangabe bei FileChooser AWT, Swing, JavaFX & SWT 7
W Vorschau mit FileChooser: Ereignis bei Datei ausgewählt? AWT, Swing, JavaFX & SWT 4
H FileChooser AWT, Swing, JavaFX & SWT 5
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
S Layout - Problem AWT, Swing, JavaFX & SWT 1
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
R Layered Layout AWT, Swing, JavaFX & SWT 1
E showAndWait is not allowed during animation or layout processing Memory FX AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
I JavaFX - festes Layout AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
kilopack15 Interface mit Layout verknüpfen AWT, Swing, JavaFX & SWT 2
Y Layout/Ausrichtungsprobleme AWT, Swing, JavaFX & SWT 4
T JavaFX Custom Layout AWT, Swing, JavaFX & SWT 5
A GUI Layout AWT, Swing, JavaFX & SWT 11
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout reagiert nicht auf Constraints AWT, Swing, JavaFX & SWT 4
IsSchoGuat LayoutManager Layout-Containergrösse AWT, Swing, JavaFX & SWT 4
F GridBag Layout AWT, Swing, JavaFX & SWT 1
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
J ComboBoxModel addElement verändert Layout AWT, Swing, JavaFX & SWT 8
E Probelm mit Layout AWT, Swing, JavaFX & SWT 1
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
P Tipps für GUI-Layout AWT, Swing, JavaFX & SWT 2
M Passender Layout-Manager AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout zur Laufzeit ändern AWT, Swing, JavaFX & SWT 8
B LayoutManager Card Layout AWT, Swing, JavaFX & SWT 2
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
1 Eigenes Layout schreiben AWT, Swing, JavaFX & SWT 4
B SWT layout invalidieren in SWT? AWT, Swing, JavaFX & SWT 4
R Welchen Layout Manager/ Wie strukturieren? AWT, Swing, JavaFX & SWT 14
J Layout: oben 20% unten 80% AWT, Swing, JavaFX & SWT 12
T Layout für Listendarstellung AWT, Swing, JavaFX & SWT 3
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
K Eclipse Layout (Gimp Layout, Tiled Layout...) AWT, Swing, JavaFX & SWT 4
C LayoutManager Passendes Layout gesucht AWT, Swing, JavaFX & SWT 2
M Layout funktioniert nicht AWT, Swing, JavaFX & SWT 3
dzim Layout von Panes in JFX2 AWT, Swing, JavaFX & SWT 17
H Layout Idee AWT, Swing, JavaFX & SWT 8
M Swing Dynamisches Layout AWT, Swing, JavaFX & SWT 10
P Swing welchen Layout Manager verwenden AWT, Swing, JavaFX & SWT 9
J LayoutManager Komponentenaustausch zerschießt Layout AWT, Swing, JavaFX & SWT 4
F Layout-Problem AWT, Swing, JavaFX & SWT 2
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
B Anderen Layout-Manager verwenden AWT, Swing, JavaFX & SWT 17
E Null-Layout - Wie geht es ohne? AWT, Swing, JavaFX & SWT 19
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
D Bild in JPanel verschiebt Layout. Wie fixieren? AWT, Swing, JavaFX & SWT 9
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
D Problem mit 3-Spalten Layout AWT, Swing, JavaFX & SWT 17
ARadauer Wenig Material zum Thema: Design, Layout, Usability von Swing Anwendungen AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben