Swing GUI und Model mit Timer

findus_pro

Mitglied
Hallo!

Ich hoffe mir kann jemand helfen:

Ich programmier gerade für meinen Ferialjob ein Javaprogramm, das aus Text-Dateien Werte ausliest und dann auf einer Landkarte visualisiert. Die Tetdatein werden alle 15min akutalisiert.

Ich habe jetzt ganze so strukturiert:
Ich habe eine Mainklasse wo zuerst das model und dann das GUI angelegt werden. Das model liefert mir ein Array mit allen formatierten werten die ich nur mehr auslesen und in JLabels packen muss. Dem GUI wird dann das model übergeben.

Das funktionert alles perfekt aber jetzt steh ich vor dem Problem wie ich das mit der Aktualisierung machen soll...

Ich weiß dass man das über Timer machen soll aber in der GUI befindet sich auch ein Button der immer anklickbar sein soll der ein zusätzliches Fenster öffnet. wenn ich jetzt einen Timer einfüge dann kann ich den Button nicht mehr anclicken.

Hat jemand eine Idee wie man das machen könnte?

LG
 

eRaaaa

Top Contributor
wenn ich jetzt einen Timer einfüge dann kann ich den Button nicht mehr anclicken.

Das sieht stark danach aus dass dadurch deine GUI blockiert wird.
Welchen Timer nutzt du denn? Den Swing Timer oder den aus java.util ? Bei dem Swing Timer wird durch den Listener der übergeben wird, der Code auf dem EDT ausgeführt, also auf dem GUI Thread. Dauert das nun eine Weile, blockierst du somit die GUI! Eine Möglichkeit wäre, einen neuen Thread zu starten (was aber im ersten Gedankengang schwachsinnig wäre), oder aber nicht den swing Timer zu nutzen, sondern den aus util und dann Änderungen die die GUI betreffen (es sei denn sie sind Threadsafe) mit SwingUtilities.invokeLater vom EDT ausführen zu lassen.
Oder man benutzt den Swingworker.
Am Bestne du liest dir mal das komplette Kapitel Worker Threads and SwingWorker (The Java™ Tutorials > Creating a GUI With JFC/Swing > Concurrency in Swing) durch.
 

Michael...

Top Contributor
Ich weiß dass man das über Timer machen soll aber in der GUI befindet sich auch ein Button der immer anklickbar sein soll der ein zusätzliches Fenster öffnet. wenn ich jetzt einen Timer einfüge dann kann ich den Button nicht mehr anclicken.

Hat jemand eine Idee wie man das machen könnte?
Versteh ich nicht. Was hat der Timer mit dem Button zu tun und warum soll der nicht mehr anklickbar sein, wenn ein Timer "eingefügt" wird?

Soll die Aktualisierung sowohl in festen Intervallen über einen Timer o.ä. als auch interaktiv über diesen Button erfolgen?
Wenn das Einlesen in einer eigenen (Controller) Methode implementiert ist, dann können doch sowohl der Timer als auch der Button einfach diese Methode aufrufen. Die Methode liest die Daten ein schreibt sie (synchronisiert) ins Model, das Model informiert die GUI über die Änderung der Daten, die GUI aktualisiert sich. (falls das Lesen der Datei und das Übertragen der Daten ins Model länger dauert, sollte man diesen Prozess evtl. in einen eigenen Thread ablaufen lassen)
 

findus_pro

Mitglied
@Michael:

vl is es hilfreicher ich schreib mal genau wie meine Klassen ausschaun weil vl liegts and der Struktur... bin nicht wirklich gut in Swing und MVC und so...

also ich hab meine Class Main
Java:
public class PegelkarteMain {
	private static View ui;
	private static Pegelmodel m;
	
	public static void main(String[] args) {
		
		//create the model for the App
		m = new Pegelmodel();
		//create the GUI for the App and start it 
		ui = new View(m);
		

	}	
}

im model wird das Array eingelesen und in View rufe ich die Methode initGUI auf wo der ganze Frame aufgeaut wird.

und ich hätt dann am Ende vom der initGUI methode einen Timer
Java:
Timer timer = new Timer();
         Task t = new Task();	
         timer.schedule(t, 0, 900000);

der mir folgendes ausführt

Java:
class Task extends TimerTask {

	@Override
	public void run() {
		model.refresh();
		resetFrame();
		return;
	}
		
}

und dann ist der Button gesperrt...
Mit Threads kenn ich mich ned wirklich aus..

lg
 

Michael...

Top Contributor
und dann ist der Button gesperrt...
Mit Threads kenn ich mich ned wirklich aus..
Was heißt "gesperrt" nicht mehr anklickbar und komplette GUI ist nicht mehr bedienbar (graues Fenster/"Schlieren" beim verschieben...)? Dann läuft das Lesen und Verabeiten der Daten im EDT und die GUI ist blockiert.
Der Fehler liegt vermutlich in der Methode refresh() des Models. (Wird die Methode auch vom Button aufgerufen bzw. was soll überhaupt passieren, wenn auf den Button geklickt wird?)

Was passiert in der refresh()?

Der Aufruf von "resetFrame()" schaut mir nach einer unsauberen Implementierung des MVC aus - sollte aber nicht das Problem sein.
 

findus_pro

Mitglied
also in der refresh() methode vom model wird das erstelle array noch einmal geladen

ist aber die gleiche methode die auch ganz am anfang aufgerufen wird also die funktioniert gut.

und des resetFrame() baut dann die Teile die sich geändert haben in der GUI neu auf


Was heißt "gesperrt"
also der Button schaut eigentlich aus wie immer nur dass er nicht mehr anklickbar ist = der eingestellte Tooltip erscheint nicht mehr und die hovereffekte die er bei mir ganz automatisch macht gehen auch nicht und beim anklicken passiert auch nichts... lasse ich den Timer weg funktioniert die GUI ganz einwandfrei...


Der Button ist dazu da ein Panel mit weiteren Infos aus dem model sichtbar zu machen... es ist also essenziell dass der funktioniert.

lG
 

Michael...

Top Contributor
Ist der Button nur während des Einlesens der Daten "gesperrt" und danach wieder bedienbar? Dann liegt ziemlich sicher eine Blockade des EDT vor (s. Post eRaaaa)
Einen anderen Grund kann ich mir nicht vorstellen.
 

findus_pro

Mitglied
Bitte sehr einmal meine View.class

Java:
package ui;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.TimerTask;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

import model.Pegelmodel;

/**
 * The class <code>View<code> creates the UI for the class 
 * <code>PegelkarteMain<code>. It contains also a Instance of the 
 * class <code>Pegelmodel<code> where all data for filling the UI comes from.
 * 
 * @see Pegelmodel
 * @see PegelkarteMain
 * @author Ehrentraud Hager
 * @version 1.0
 */
public class View {
	private JFrame frame;
	public Pegelmodel model;
	private JLayeredPane pane;
	private JLabel background;
	private JPanel foreground;
	private String[][] array;
	
	/**
	 * Constructor
	 * @param m -> {@link Pegelmodel}
	 */
	public View(Pegelmodel m) {
		model = m;
		array = m.getData();
		initUI();
	}
	
	/**
	 * @return void <br><br>
	 * Initializes the graphical-user-interface of the application. 
	 */
	private void initUI() {
		
		//initialize frame and set parameter
		frame = new JFrame("Pegelkarte");
		frame.setVisible(true);
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		frame.setSize(1920, 1080);
		
		//create layered content-pane
		pane = new JLayeredPane();
		frame.setContentPane(pane);
		
		//create background image
		ImageIcon map = new ImageIcon("map.png");
		background = new JLabel();
		background.setSize(1920, 1080); 
		background.setBackground(Color.GRAY);
		background.setIcon(map);
		
		/* 
		 * create the foreground-panel on which all the single
		 * labels for the gauge-stations are located
		 */
		foreground = new JPanel();
		foreground.setSize(1920, 1080);
		foreground.setOpaque(false);
		foreground.setLayout(null);
		
		/*
		 * create the button in the right corner of the frame 
		 * for setting a hidden panel visible with all the gauge-stations and values
		 */
		final JPanel side = new JPanel();
		side.setVisible(false);
		side.setSize(650, 1080); //TODO richtige abmessungen 
		side.setLocation(1420, 0);
		side.setLayout(null);
		side.setToolTipText("Alle Pegelstände und Durchflusswerte");
		
		//button for set the side panel visible
		final JButton button = new JButton("Alle Pegelstellen und Werte");
		button.setLocation(1650,990); 
		button.setSize(250, 50);
		button.setToolTipText("Alle Wasserstände und Durchflusswerte" );
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				side.setVisible(true);
				button.setVisible(false);
			}
		});
		
		//button for setting the side panel invisible
		JButton sideButton = new JButton("Schließen");
		sideButton.setLocation(380, 990);
		sideButton.setSize(90, 40);
		sideButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				side.setVisible(false);
				button.setVisible(true);
			}
		});
		
		side.add(sideButton);
		
		
		foreground.add(side);
		foreground.add(button);
		
		//add the panels with the water levels to the pane
		//addLabels();
		
		//add the background and the foreground to the content-pane
		pane.add(foreground);
		pane.add(background);
		
		
		Timer timer = new Timer();
		Task t = new Task();	
		timer.schedule(t, 0, 900000);
	}
	
	/**
	 * Method for adding panels with the content from the array of the model
	 * @return void
	 */
	private void addPanels() {
		
		//TODO add the gauge-stations with the values to Labels and add them 
		//to the foreground-panel  
	}
	
	/**
	 * Method for resetting the frame if the model and the values changed
	 * @return void
	 */
	private void resetFrame() {
		pane = new JLayeredPane();
		
		//add the labels with the water levels
//		addLabels();
		
		//add the background
		pane.add(background);
		pane.add(foreground);
		
	
	}
	
	/**
	 * Class for refreshing the model and so refreshing the GUI too
	 * @author Ehrentraud Hager
	 * @version 1.0
	 * @see TimerTask
	 */
	class Task extends TimerTask {

		@Override
		public void run() {
			model.refresh();
	
		resetFrame();
			return;
		}
		
	}

}

Dann meine Pegelmodel.class

Java:
package model;


import java.io.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.EventObject;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;

/**
 * The class <code>Pegelmodel</code> is the model and the calculating class 
 * for the UI <code>View</code>. The class <code>PegelkartMain</code> contains 
 * an instance of it also the class <code>View</code>.
 * 
 * @see ui.View
 * @see PegelkarteMain
 * @author Ehrentraud Hager
 * @version 1.0
 * @since 13.7.2012 - Java 1.6.0_24
 */
public class Pegelmodel {
	private String[][] data;
	private List<ModelChangedListener> listener; 
	
	/**
	 * Constructor
	 */
	public Pegelmodel() {
		data = getDataFromFile();
		listener = new ArrayList<ModelChangedListener>();
	}
	
	/*Methods for adding and removing listeners to the model*/
	/**
	 * @param ml -> {@link ModelChangedListener}<br>
	 * <br> Adds a listener from the {@code ArrayList} <b>listener</b>
	 */
	public void addModelChangedListener(ModelChangedListener ml) {
		listener.add(ml);
	}
	
	/**
	 * @param ml -> {@link ModelChangedListener}<br>
	 * <br> Removes a listener from the  {@code ArrayList} <b>listener</b>
	 */
	public void removeModelChangedListener(ModelChangedListener ml) {
		listener.remove(ml);
	}
	
	
	/** 
	 * @return  {@code String[][]} <b>data</b><br><br>
	 * Gives the array back where following values are saved:<br>
	 * 
	 * 	name | date | time | water-level
	 */
	public String[][] getData() {
		return data;
	}
	
	
	/**
	 * Method which loads the entire array of gauge-stations and 
	 * the water-level again
	 */
	public void refresh() {
		getDataFromFile();
//		fireModelChanged();
	}

/*________________PRIVATE_SECTION________________*/
	
	/**
	 * @return {@code String[][]} <b>array</b>
	 * 
	 * <br>Array of gauge stations with 
	 * their name, date, time and water level
	 */
	private String[][] getDataFromFile() {
		String[][] array = null; //return-array
		ArrayList<String> forArray = new ArrayList<String>(); //list for return-array
		ArrayList<String> gaugeStations = new ArrayList<String>(); //list for reading from config-file
		
		/*--------Buffer-------*/
		BufferedReader bufferConfig = null;
		BufferedReader bufferGaugeStation = null; 
		/*---------------------*/
		
		String path = null;//path to the directory of the single Files
		
		//get configuration-file with paths to the single data-files for the gauge-stations
		File config = new File("C:/Users/Vaio/Documents/Ferialjobs/Land Oberösterreich/Applet für Hydro/Config.txt"); 
		//TODO: get the real Pathname
		
		//create the file-reader for the configuration-file
		try {
			bufferConfig = new BufferedReader(new FileReader(config));
		} catch (FileNotFoundException e) { 
			JOptionPane.showMessageDialog(null, "Config-File not found", "Error", JOptionPane.ERROR_MESSAGE);
			System.exit(1);
		}
		
		//read in the path for all other gauge-files
		try {
			path = bufferConfig.readLine();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(2);
		}
		//Create buffer for reading from the gauge-file

		//read the configuration-file in the StringArray for adaption
		String read = null;
		int length = 0;
		
		try {
			read = bufferConfig.readLine();
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, "Can't read from config-file", 
					"Error", JOptionPane.ERROR_MESSAGE);
			e.printStackTrace();
			System.exit(2);
		}
		
		while(read != null) {
			gaugeStations.add(read);
			length++;
			
			try {
				read = bufferConfig.readLine();
			} catch (IOException e) {
				JOptionPane.showMessageDialog(null, "Can't read from config-file", 
						"Error", JOptionPane.ERROR_MESSAGE);
				e.printStackTrace();
				System.exit(2);
			}
		}
		
		//Closing the buffer and the config-file
		try {
			bufferConfig.close();
		} catch (IOException e1) {
			JOptionPane.showMessageDialog(null, 
					"Error occured while closeing the config-file", 
					"Error", JOptionPane.ERROR_MESSAGE);
			e1.printStackTrace();
			System.exit(3);
		}
		
		//split the elements of the array-list and save to another array
		//   0 |  1 |  2       | 3
		// name|path|separator | parameter
		String[][]gauge = new String[length][4];
		
		Pattern p = Pattern.compile(" ");
		for(int i = 0; i < length; i++) {
			gauge[i] = p.split(gaugeStations.get(i));
		}
		
		
		/* load the data from the path and save it to the array-list*/
		array = new String[gauge.length][5];
		File gaugeStation = null;
		String pathNew = null;
		
		for(int i = 0; i<gauge.length; i++) {
			
			//get the new File
			pathNew = path + gauge[i][1]; 
			gaugeStation = new File (pathNew);
			
			//Create buffer for reading from the gauge-file
			try {
				bufferGaugeStation = new BufferedReader(new FileReader(gaugeStation));
			} catch(FileNotFoundException e) {
				JOptionPane.showMessageDialog(null, 
						"Datei der Pegelstelle " + gauge[i][0] + " nicht gefunden!" , 
						"Error", JOptionPane.ERROR_MESSAGE);
				System.exit(1);
			}
			
			//reading the first line from buffer
			try {
				read = bufferGaugeStation.readLine();
			} catch (IOException e) {
				JOptionPane.showMessageDialog(null, "Can't read from file " + gauge[i][1], 
						"Error", JOptionPane.ERROR_MESSAGE);
				e.printStackTrace();
				System.exit(2);
			}
			
			//checking if the gauge-file contains something
			if(read == null) {
				JOptionPane.showMessageDialog(null, "Pegelstellen " + gauge[i][0] + ": Keine Daten vorhanden!", 
						"Warning", JOptionPane.WARNING_MESSAGE);
				//adding an additional line to the array list
				forArray.add(gauge[i][0] + ";00:00:00;00:00:00;-9999;" + gauge[i][3]);					
			} else {
				//adding the read line to the array list
				forArray.add(gauge[i][0] + ";" + read);
			}
			
			try {
				bufferGaugeStation.close();
			} catch (IOException e) {
				JOptionPane.showMessageDialog(null, "Error occured while closeing the config-file", 
					"Error", JOptionPane.ERROR_MESSAGE);
				e.printStackTrace();
				System.exit(3);
			}
		}
		
		/*split the single elements from the array-list with the Pattern p1 and 
		 * save it to the return-array 
		 *   0 |  1 | 2  |  3  |    4
		 * name|date|time|value|parameter  
		 */
		
		//new pattern for separator which is saved in the gauge-array
		Pattern p1;
		//system time
		Date nowDate = new Date();
		Calendar now = new GregorianCalendar();
		now.setTime(nowDate);
		
		
		//preparations to get the time from the entry in the return-array
		Calendar time = Calendar.getInstance();
		time.setTime(nowDate);
		String[] timeString = new String[3]; //array for hours, minutes, seconds -> String
		Pattern pTime = Pattern.compile(":");
		long differenz;
		long minutes;
		
		for(int i = 0; i < gauge.length; i++) {
			//makes a new pattern for the separator-character
			p1 = Pattern.compile(gauge[i][2]);
			
			array[i] = p1.split(forArray.get(i));
			
			if(Integer.parseInt(array[i][3]) >0) { //if there is no data the value is already -9999
				//get the time of the array-entry
				timeString = pTime.split(array[i][2]);
				time.set(Calendar.HOUR, Integer.parseInt(timeString[0]));
				time.set(Calendar.MINUTE, Integer.parseInt(timeString[1]));
				time.set(Calendar.SECOND, Integer.parseInt(timeString[2]));
				
				//check if the time is valid (not older than half an hour)
				differenz = now.getTimeInMillis() - time.getTimeInMillis();
				minutes = Math.round((double)differenz / (60. * 1000.));
				if(minutes > 30) {
					 array[i][3] = "-9999"; //Time is not valid -> maybe technical damage
				}
			}	
		}
		return array;
	}

und zu guter letzt meine Main klasse... ich hoff ihr knnt damit was anfangen

Java:
import java.util.Timer;
import java.util.TimerTask;

import model.Pegelmodel;
import ui.View;

/**
 * The class <code>PegelkarteMain</code> is the main class for this Java-applet. 
 * It initializes instances of the classes <code>View</code> and <code>Pegelmodel<code>.<br>
 * 
 * @see Pegelmodel
 * @see View
 * @author Ehrentraud Hager
 * @version 1.0
 * @since 13.7.2012 Java 1.6.0_24
 * 
 */
public class PegelkarteMain {
	@SuppressWarnings("unused")
	private static View ui;
	private static Pegelmodel m;
	
	public static void main(String[] args) {
		
		//create the model for the App
		m = new Pegelmodel();
		//create the GUI for the App and start it 
		ui = new View(m);
		

	}	
}
 

Michael...

Top Contributor
Unter Demo Code verstehe ich zwar was anderes, aber der Fehler liegt so wie es ausschaut an Deiner resetFrame() Methode, kommentier die mal in der run() der TimerTask aus dann werden die Daten zwar nicht aktualisiert, aber der Button sollte der Button bedienbar bleiben. Wobei ich mir nicht sicher bin, da das ganze - offen gesprochen - eher nach Basteln aussieht und mit einem Null Layout zu arbeiten problematisch ist.

Mal abgesehen davon, dass Dein Vorgehen falsch ist, reagiert der Button nicht mehr, weil er eigentlich gar nicht mehr an der Stelle existiert. In der resetFrame() setzt Du background und foreground auf ein neues JLayerdPane und sind somit auf dem angezeigten JLayerPane nicht mehr verfügbar. Eigentlich müsste dann das ganze Layout "zerschossen" sein. Verschiebe mal Dein Fester oder ändere dessen Größe. Ist dann überhaupt noch was zu sehen?

Eigentlich ist doch der nicht verwendete ModelChangedListener dafür gedacht um die View über Informationen am Model zu informieren. Die View kann sich darauf hin die notwendigen Daten aus dem Model besorgen.
 

findus_pro

Mitglied
Danke genau das wars. Hab jetzt den Timer ins Model gschmissen und ruf im Timer die Methode fireModelchanged auf, hab einen ModelChangedListener beim View hinzugefügt und resetFrame überarbeitet.

Dass der Button nicht anklickbar war hat wirklich an der reset Methode gelegen.


Nur noch zur erklärung: Das
Code:
null
Layout ist ganz bewusst gewählt weil ich Labels auf einer Karte an Koordinatenpunkte setzen muss und das so am einfachsten und schönsten geht.

Danke an alle!!!

lg
:applaus: :toll:
 

Michael...

Top Contributor
Ich wollte das Null Layout ja nicht verteufeln, sondern eigentlich nur ausdrücken, dass man es bewusst einsetzen muss ;-) Viele nutzen ja es einfach nur aus Bequemlichkeit - weil es angeblich so einfach zu handeln ist.
Aber freut mich, dass ich Dir mit dem anderen Hinweis helfen konnte und Du das Problem damit lösen konntest.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Default table model aktualisieren AWT, Swing, JavaFX & SWT 7
A ViewController (IFrame) > Jdialog > Model AWT, Swing, JavaFX & SWT 1
J Saubere Trennung Model, View, Controller Javafx AWT, Swing, JavaFX & SWT 10
F JComboBox und Model AWT, Swing, JavaFX & SWT 10
S UI Model Binding AWT, Swing, JavaFX & SWT 7
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX Exception Message von Model Class via Controller in View darstellen AWT, Swing, JavaFX & SWT 39
ralfb1105 JavaFX MVC: Thread in Model Class mit Ausgabe in TextArea AWT, Swing, JavaFX & SWT 10
B JavaFX mvvmfx - Model AWT, Swing, JavaFX & SWT 3
J JavaFX - mehrere Views, Model durchreichen AWT, Swing, JavaFX & SWT 10
T JavaFX Model Daten übergeben AWT, Swing, JavaFX & SWT 4
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
M JList Model filtern AWT, Swing, JavaFX & SWT 4
O Swing JTextField Sync View -> Model AWT, Swing, JavaFX & SWT 3
S Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren AWT, Swing, JavaFX & SWT 6
P jTable model setzen AWT, Swing, JavaFX & SWT 6
D SWT TreeViewer: Daten aus Model gelöscht... trotzdem noch im Baum AWT, Swing, JavaFX & SWT 4
earlgrey_tea JTextfield Model AWT, Swing, JavaFX & SWT 14
L Swing Model für ComboBox AWT, Swing, JavaFX & SWT 14
O Swing JTable - Zeilen färben (mit Model) AWT, Swing, JavaFX & SWT 13
C Swing JTable verbindet sich nicht mit Model AWT, Swing, JavaFX & SWT 20
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
C Swing MVC Verbindung von Model und Db AWT, Swing, JavaFX & SWT 23
R Model View Controller Konzept AWT, Swing, JavaFX & SWT 2
N update model nach dem filtern AWT, Swing, JavaFX & SWT 2
R Swing Designfrage - Zusammenspiel Model / View AWT, Swing, JavaFX & SWT 10
D Swing JList, CellRenderer und Model AWT, Swing, JavaFX & SWT 6
J Swing SwingActions und das Problem auf den View bzw. das Model zuzugreifen AWT, Swing, JavaFX & SWT 2
K Swing JTable Model aktualisieren AWT, Swing, JavaFX & SWT 2
C Swing JComboBox probleme bei Set Model AWT, Swing, JavaFX & SWT 5
T JTable Model AWT, Swing, JavaFX & SWT 5
D Swing JTable Model View Problem AWT, Swing, JavaFX & SWT 6
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
D ComboBox-Model mit Observer AWT, Swing, JavaFX & SWT 3
M Swing Model an View binden AWT, Swing, JavaFX & SWT 4
R Zugriff auf Model im MVC-Design aus SwingWorker heraus AWT, Swing, JavaFX & SWT 3
Z JLIST / Model erster EINTRAG AWT, Swing, JavaFX & SWT 11
G Model,Listener und background jobs AWT, Swing, JavaFX & SWT 4
X Swing JList -> Daten anders darstellen als im Model hinterlegt -> möglich ? AWT, Swing, JavaFX & SWT 9
N Model Aktualisieren AWT, Swing, JavaFX & SWT 4
N Swing JComboBox: Auf Model- und Selectionänderungen reagieren AWT, Swing, JavaFX & SWT 2
D JTable, Model, Fokus AWT, Swing, JavaFX & SWT 3
hdi Swing JTable: Löschen vom Daten im Model AWT, Swing, JavaFX & SWT 7
R Swing alle Frames nutzen das gleiche Model AWT, Swing, JavaFX & SWT 2
S JList mit Vector als Model? AWT, Swing, JavaFX & SWT 12
S JTree mit Daten aus Model füllen, eigenes TreeModel (gute Dokumentation des Problems) AWT, Swing, JavaFX & SWT 2
J JTable Model laesst sich nicht serialisieren? AWT, Swing, JavaFX & SWT 16
D ComboBox(Model) mit dummyItem AWT, Swing, JavaFX & SWT 10
G JComboBox mit eigenem Model vorhanden, wie selektieren AWT, Swing, JavaFX & SWT 29
M MVC: Grundidee verstanden aber was machen mit mehreren Model AWT, Swing, JavaFX & SWT 2
V JList ist leer -Model ist voll. Ja, ne is klaaa. AWT, Swing, JavaFX & SWT 8
K JSpinner - Model <-> View, unterschiedliche Werte AWT, Swing, JavaFX & SWT 9
W Suche großes vollständiges Swing GUI Beispiel nach MVC Model AWT, Swing, JavaFX & SWT 5
P jTable mit Model lässt sich nicht neu laden AWT, Swing, JavaFX & SWT 5
P JTable/Model füllen mit Fortschrittsbalken, Var. Rückgabetyp AWT, Swing, JavaFX & SWT 2
J model von jcombobox AWT, Swing, JavaFX & SWT 4
D Swing und MVC und doppeltes Model? AWT, Swing, JavaFX & SWT 5
G JTable und Model AWT, Swing, JavaFX & SWT 21
B View zeichnet Daten aus dem Model ohne Update AWT, Swing, JavaFX & SWT 4
J JTable / Model Daten verändern AWT, Swing, JavaFX & SWT 5
C Model View Controller - Beispielimplementation AWT, Swing, JavaFX & SWT 5
C [JTable] ArrayIndexOutOfBoundsException im Model AWT, Swing, JavaFX & SWT 8
Icewind Jlist zeigt neue elemente im model nicht sofort an AWT, Swing, JavaFX & SWT 3
Icewind JTable zeigt neue elemente im model nicht sofort an AWT, Swing, JavaFX & SWT 3
G Neues Model für JTextField erstellen AWT, Swing, JavaFX & SWT 8
A Gemeinsames Model für Baum- und Graphdarstellung-wie gehts? AWT, Swing, JavaFX & SWT 9
S Frage zu Table(Column)Model AWT, Swing, JavaFX & SWT 3
H Model umbauen ? AWT, Swing, JavaFX & SWT 5
M SWT und Model View Controller? AWT, Swing, JavaFX & SWT 8
J Table Model AWT, Swing, JavaFX & SWT 2
J Abstract Table Model AWT, Swing, JavaFX & SWT 7
D Model Listener beim JTree AWT, Swing, JavaFX & SWT 5
E JDialog mit count down timer AWT, Swing, JavaFX & SWT 1
M 2D-Grafik timer bei Analoguhr AWT, Swing, JavaFX & SWT 2
A Timer AWT, Swing, JavaFX & SWT 1
H Timer ohne alles lahmzulegen? AWT, Swing, JavaFX & SWT 2
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Timer in SwingWorker stoppen AWT, Swing, JavaFX & SWT 4
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
M Event Handling MousePressed vs. Timer! AWT, Swing, JavaFX & SWT 5
F Java Timer Bug? AWT, Swing, JavaFX & SWT 6
B Timer, TimerTask und Warten AWT, Swing, JavaFX & SWT 4
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
E Problem mit Timer und Swing AWT, Swing, JavaFX & SWT 8
N AWT Timer überschreiben? AWT, Swing, JavaFX & SWT 8
P Label rotieren mit Timer AWT, Swing, JavaFX & SWT 5
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
J Nach Timer ausführen AWT, Swing, JavaFX & SWT 6
S Timer oder Thread.sleep AWT, Swing, JavaFX & SWT 3
D Timer JFrame AWT, Swing, JavaFX & SWT 7
F Swing timer nimmt delay nicht an AWT, Swing, JavaFX & SWT 2
S Swing Timer, Countdown AWT, Swing, JavaFX & SWT 2
F Timer welches JPanel aktualisiert AWT, Swing, JavaFX & SWT 6
H Timer/Stoppuhr in MenuBar anzeigen AWT, Swing, JavaFX & SWT 4
D Applet Methode in Timer einbinden AWT, Swing, JavaFX & SWT 6
F Applet Applet starten...(+Timer?) AWT, Swing, JavaFX & SWT 12
R Probleme mit Swing Timer AWT, Swing, JavaFX & SWT 6
C Timer Problem AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben