Swing Mit Timer JLabel updaten

Burny91

Mitglied
Hallo Leute,

ich bin gerade dabei ein Sudoku zu programmieren, deswegen möchte ich eine Zeit und Punkteangabe programmieren. Ich bin schon soweit gekommen das ich mittels util.Timer einen Task starte. Dieser Task berechnet mir die Punkte und zählt einen Attribut, welches die Zeit darstellt, jede Sekunde höher. Jetzt möchte ich in meinem JLabel der GUI, die aktuellen Punkte und Zeitangaben, jede Sekunde updaten.

Die GUI ist ein GridLayout. In der Ersten Reihe ist ein JTable und in der Zweiten ein JButton, welche zu vernachläassigen ist. Wichtig ist in der Dritten Reihe das JLabel welches wie oben beschrieben funktionieren soll.

Oder anders: Solitare -> unten Rechts im Window Punkte und Zeit. Genau so möchte ich es haben =)

Das sieht wie folgt aus:

Java:
package timer_highscore;

import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.util.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import javax.swing.ListSelectionModel;


public class TestFrame extends JFrame{
	
	protected static final Frame TestFrame = null;
	public String[][] rowData;
	public String[] columnNames;
	public JButton addData;
	public JLabel label;
	public Score score;
	
	TestFrame(){
		
		Timer timer = new Timer();

	        timer.scheduleAtFixedRate(new Score(Level.EASY), 1000, 1000);
		
		setLayout(new GridLayout(3, 1));
		
		String[][] rowData = {{ "Christian", "245" }, { "Sonja", "240" }, { "Sabine", "220" }, 
			      { "Gerald", "217" }, {"Dustin", "0"} }; 
		
		String[] columnNames = { "Name", "Score" }; 
		
		final JTable table = new JTable( rowData, columnNames);
		
		// JTable display properties
		table.setAutoCreateRowSorter(true);
		table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		table.setIntercellSpacing(new Dimension(0,0));
		
		//JButton
		JButton addData = new JButton("Add");
		
		//Adding components to frame
		JLabel label = new JLabel();
		
		add( new JScrollPane(table));
		add(addData);
		add(label);
		pack();		
		
		//Frame properties
		setName("TestFrame");
		setSize(800, 600);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
		
	}
	
	public void update(){
		
//		score.run();
//		label.setName("Score: " + String.valueOf(score.getPoints()) + " Time: " + String.valueOf(score.getTime()));
		label.setName(String.valueOf(score.getPoints()));
		
	}
	
	public static void main(String args[]){
		TestFrame tf = new TestFrame();
		tf.update();
	}
}

package timer_highscore;

import java.util.TimerTask;

public class Score extends TimerTask{
		
	private int points = 0;
	private int reducer = 0;
	private int time = 0;
	
	Score(){
		
	}
	
	Score(Level level){
		if (level == Level.EASY){
			points = 5000;
			reducer = 5;
		}else{
			if (level == Level.MEDIUM){
				points = 10000;
				reducer = 10;
			} else{
				if (level == Level.DIFFICULT){
					points = 15000;
					reducer = 15;
				} else{
					points = 20000;
					reducer = 20;
				}
			}
		}
		System.out.println(points);
	}
	
	public int getPoints(){
		return points;
	}
	
	public int getTime(){
		return time;
	}
	
	public void run(){
		// Reducing points
		points -= reducer;
		// Time counting up each second
		time += 1;
		System.out.println("Score: "+points +" Time: "+ time);
	}
}

Hoffe auf baldige Hilfe

Mfg Burny
 
wie verstehe ich das jetzt richtig, dass die Übergabe nicht klappt?...also ich musste sowas ähnliches mal in einem Spiel machen und dann habe ich mittels Observer jedes Mal wenn der Timer hochgezählt wurde, also Run ausgeführt wurde dem GUI bescheid gegeben, welches sich per Getter den neuen Wert geholt hat und eingefügt hat....

label.setName(String.valueOf(score.getPoints()));

sollte das nicht label.setText(String.valueOf(score.getPoints())); sein?^^
 
Ja, das mit setText() ist mir auch gerade aufgefallen x)
Hm Observer? Ist das nicht MVC? Ich mach mich mal schlau 🙂

Meld mich wieder wenn weitere Probleme gibt.

burny
 

Neue Themen


Zurück
Oben