repaint() geht gar nicht; GUI aktualisieren

J

john1337

Gast
Hi,

ich habe eine GUI die in meiner main_class erzeugt wird
Launcher.java
Java:
public class Launcher extends JFrame implements ActionListener{
main_class.java
Java:
public class main_class {
	public static void main(String args[]){
		Launcher launcher = new Launcher();
		launcher.setVisible(true);
	}
}
es geht alles, ich kann sogar in meinem launcher eine 2te gui, die das eigentliche spiel darstellt, erzeugen und anzeigen. ich hab sogar mehrere Klassen deren Objekte munter aufeinander zugreifen und mit getter-Methoden die Titel einiger label und buttons bestimmen.

Das Problem ist, wenn ich etwas ändere ändert sich nichts in der GUI. es wird bis dahin alles korrekt ausgeführt (mit popupfenster kontrolliert). Alles was einmal gezeichnet wurde bleibt unverändert (abgesehen von Textfields; aber das ist ja klar).
ich habe an jeder erdenklichen Stelle des Codes die repaint()-Methode aufgerufen ohne erfolg.
ich habe 20 verschiedene Forenbeiträge und Lösungsvorschläge durchgelesen; nichts... und jetzt bin total verwirrt. vielleicht liegt's an mir aber die Hintergrundfarbe ändern geht auch nicht mehr.

ALSO: wo muss repaint() oder irgendwas zum aktualisieren aufgerufen werden?
danke schon mal im vor raus. :-(
 
J

john1337

Gast
noch nicht. wie sieht denn der update-befehl aus und wo genau muss der aufgerufen werden?
 

bERt0r

Top Contributor
Repaint ist schon richtig, updateUI bringt gar nix und ist falsch. Zu deinem Problem kann man ohne Code aber nicht viel sagen. Du musst schon etwas präziser sein und uns sagen, was geht und was nicht. Vorallem aber was dabei am ende rauskommen soll.
 
F

Firephoenix

Gast
Was genau soll den aktualisiert werden?
Texte von Buttons kannst du z.B. per Observer-Pattern deine Daten überwachen lassen und sie daraufhin anpassen.
Bei komponenten wie JPanel, bei denen du eigene Zeichenoperationen durchführst, würdest du mittels Überschreiben von paintComponent() und repaint() wohl auch Ergebnisse bekommen.
Vielleicht hilft dir das hier bei den Methoden:
http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/57543-jcomponent-wichtige-methoden.html

und hierzu:
Java:
public class Launcher extends JFrame implements ActionListener{
les dir doch mal das hier durch, solche Konstrukte sind meistens vermeidbar.
http://www.java-forum.org/blogs/firephoenix/182-leidige-extends-jframe.html


Ansonsten wie schon gesagt wurde: Etwas Code wäre hilfreich (was muss aktualisiert werden, wo kommen die Daten her und wer ist für die Aktualisierung verantwortlich)

Gruß
 
J

john1337

Gast
das mit extends JFrame werd ich später ändern; vll liegst ja sogar daran.

nun aber erstmal der gewünschte code. ich kürz das ganze erstmal recht stark da viele button und label nicht wirklich was mit dem prolme zu tun haben.
ich habe zur Zeit 6 Klassen: main_class, Launcher, Battle, Monster, Turn und Move.
die main erzeugt den Launcher der dann über nen Button die Battle-GUI starten kann. Die Monster haben Eigenschaften und Moves die in den Buttons der Battle-GUI verwendet werden. die buttons in battle rufen turn aus Turn auf. turn ändert dann die texte in battle. soweit funktioniert alles, aber repaint() macht mal garnichts
main_class.java
Java:
public class main_class {
	public static void main(String args[]){
		Launcher launcher = new Launcher();
		launcher.setVisible(true);
	}
}
Launcher.java
Java:
import javax.swing.*;
import java.awt.Color;
import java.awt.event.*;



@SuppressWarnings("serial")
public class Launcher extends JFrame implements ActionListener{
	//DEKLARATION
	private JButton buttonBattle;
//weitere button und label..
	//KONSTRUKTOR
	public Launcher(){
		setLayout(null);
		setSize(800,600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//setBackground(Color.RED); //not working; warum auch immer???
		
		// INSTANZIERUNG
//...
		
		
		// POSITION
		buttonBattle.setBounds(300,20,130,30);
//...
		
		
		// EINBINDUNG
		add(buttonBattle);
//...

		
	}
	//BUTTONS
	public void actionPerformed(ActionEvent e){
		if (e.getSource() == buttonBattle) {
			Battle battle = new Battle();
			setVisible(false);//Launcher wird invis
			battle.setVisible(true); battle wird sichtbar

		}
	}
}
Battle.java
Java:
import javax.swing.*;
import java.awt.Color;
import java.awt.event.*;

@SuppressWarnings({ "serial"})
public class Battle extends JFrame implements ActionListener{
	//DEKLARATION
	private JButton buttonMove1;
	private JButton buttonMove2;
	private JButton buttonMove3;
	private JButton buttonMove4;
	static JLabel labelChat;
	static JTextArea textAreaChat;
	

	
	public static void setBattleChat(String text){
		labelChat.setText(text);
	}
	//KONSTRUKTOR
	public Battle(){
		
		
		setLayout(null);
		setSize(800,600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		
		// INSTANZIERUNG
		labelChat = new JLabel ("the battle has begun");

		buttonMove1 = new JButton(currentMonster.getMonsterMove1().getMoveName());
		buttonMove2 = new JButton(currentMonster.getMonsterMove2().getMoveName());
		buttonMove3 = new JButton(currentMonster.getMonsterMove3().getMoveName());
		buttonMove4 = new JButton(currentMonster.getMonsterMove4().getMoveName());
		
		textAreaChat = new JTextArea("test "+ " adsadsad");
		JScrollPane scrollPane = new JScrollPane(textAreaChat);
		textAreaChat.setEditable(true);
		textAreaChat.setLineWrap(true);
		
		// POSITION		
		
		textAreaChat.setBounds(500,300,300,300);
		labelChat.setBounds(500,200,150,20);
		buttonMove1.setBounds(20,240,100,20);
		buttonMove2.setBounds(125,240,100,20);
		buttonMove3.setBounds(20,265,100,20);
		buttonMove4.setBounds(125,265,100,20);
		
		// EINBINDUNG
		add(textAreaChat);
		add(labelChat);
		add(buttonMove1);
		add(buttonMove2);
		add(buttonMove3);
		add(buttonMove4);
		
	}	// ENDE KONSTRUKTOR
		
				
	// BUTTONS
	public void actionPerformed(ActionEvent e){
		if (e.getSource() == buttonMove1) {
			Turn.turn(currentMonster.getMonsterMove1());
		}
		else if (e.getSource() == buttonMove2) {
			Turn.turn(currentMonster.getMonsterMove2());
		}
		else if (e.getSource() == buttonMove3) {
			Turn.turn(currentMonster.getMonsterMove3());
		}
		else if (e.getSource() == buttonMove4) {
			Turn.turn(currentMonster.getMonsterMove4());
		}
	}

}
Monster.java
Java:
public class Monster{
	private String name;
	private int id;
	private int hp;
	private Move move1;
	private Move move2;
	private Move move3;
	private Move move4;
	
	public Monster(String name,int id, int hp, Move move1, Move move2, Move move3, Move move4){
		this.name = name;
		this.id = id;
		this.hp = hp;
		this.move1 = move1;
		this.move2 = move2;
		this.move3 = move3;
		this.move4 = move4;
		
	}
	public Move getMonsterMove1(){
		return move1;
	}
	public Move getMonsterMove2(){
		return move2;
	}
	public Move getMonsterMove3(){
		return move3;
	}
	public Move getMonsterMove4(){
		return move4;
	}
	public String getMonsterName(){
		return name;
	}
	public int getMonsterId(){
		return id;
	}
	public int getMonsterHp(){
		return hp;
	}

	
	//List of all Monster
	static Monster monster1 = new Monster("AlphaMon", 1, 500, Move.fire, Move.ice, Move.water, Move.dark);
	static Monster monster2 = new Monster("BetaMon", 2, 500, Move.fire, Move.ice, Move.water, Move.dark);
	
}
Move.java
Java:
public class Move {
	//variables
	private String name;
	private int damage;
	private int accuracy;
	
	//Constructor
	Move(String name, int damage, int accuracy){
		this.name = name;
		this.damage = damage;
		this.accuracy = accuracy;
	}
	
	//getter
	public String getMoveName(){
		return name;
	}
	public int getMoveDamage(){
		return damage;
	}
	public int getMoveAccuracy(){
		return accuracy;
	}
	
	//objects
	static Move fire = new Move("fire",50,90);
	static Move ice = new Move("ice",40,100);
	static Move water = new Move("water",45,95);
	static Move dark = new Move("dark",180,60);
}
und zu guter letzt die wichtige Turn.java
Java:
import java.awt.*;

public class Turn {
	

	static void turn(Move usedMove){
		Battle.setBattleChat(Battle.currentMonster.getMonsterName()+ " uses " + usedMove.getMoveName());
		Battle.labelChat.repaint();
		Battle.textAreaChat.setText(Battle.currentMonster.getMonsterName()+ " uses " + usedMove.getMoveName());
		Battle.textAreaChat.repaint();
	}
}
 
F

Firephoenix

Gast
Und was genau wird davon jetzt nicht neu gezeichnet?

Wenn das Problem hier liegen sollte:
Java:
buttonMove1 = new JButton(currentMonster.getMonsterMove1().getMoveName());
und sich der Text nicht ändert, wenn sich currentMonster ändert, dann hilft dir auch repaint nicht, denn einmal gesetzt ist der Text fix, da gibt es keinen "Pointer" oder sowas der dauernd auf den moveName von currentMonster zeigt, sondern der Text wird einmal ausgewertet und dann im Button gespeichert (nämlich da wo du ihn anlegst).

Gruß
 
J

john1337

Gast
in der Turn.java wird der erste Zug ausgeführt. das wir dann über battleChat im labelChat angezeigt bzw im textAreaChat.
Java:
import java.awt.*;
 
public class Turn {
    
 
    static void turn(Move usedMove){
        Battle.setBattleChat(Battle.currentMonster.getMonsterName()+ " uses " + usedMove.getMoveName());
        Battle.labelChat.repaint();
        Battle.textAreaChat.setText(Battle.currentMonster.getMonsterName()+ " uses " + usedMove.getMoveName());
        Battle.textAreaChat.repaint();
    }
}
und ich denke immerhin JLabel sind nicht fix. es gibt ja immerhin die vordefinierte setText-methode
Java:
	public static void setBattleChat(String text){
		labelChat.setText(text);
	}
nur genau dieses label bzw. textarea wird nicht aktualisiert.

wo genau sollte denn dieses frame.add(this) hin.
 
J

john1337

Gast
habe mittlerweile das extends JFrame entfernt und das direkt über frame gemacht. kleiner Nebeneffekt ist, dass Komponenten erst sichtbar werden wenn ich das Fenster ändere. das ist aber egal das kann ich selber schon noch lösen.

aber immer noch zur alten frage: wie kann ich das Frame neuzeichnen lassen (bzw einen Teil davon) wenn sich der Inhalt (text von textfields) geändert hat.

hoffe ihr macht nur ne kleine pause nachdem ihr nun endlich den gewünschten code habt.
danke
 
F

Firephoenix

Gast
setText der betreffenden Komponente sollte eigentlich ausreichen, teste mal ob die Methode aufgerufen wird.

Hier mal ein kleines Beispiel:
Java:
public class Main {
	public static void main(String[] args) {
		new Gui(new Model());
	}
}

Java:
public class Model {

	private int actionCounter = 0;
	
	public void action() {
		actionCounter++;
	}
	
	public int getActionCount(){
		return actionCounter;
	}

}

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Gui {

	JFrame frame;
	JButton button;
	public Gui(Model model){
		frame = new JFrame("test");
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		button = new JButton("Klicks: 0");
		button.addActionListener(new MyActionListener(model, button));
		frame.getContentPane().add(button);
		frame.pack();
		frame.setVisible(true);
	}
	
	private static class MyActionListener implements ActionListener{

		Model model;
		JButton buttonToUpdate;

		public MyActionListener(Model model, JButton buttonToUpdate) {
			this.model = model;
			this.buttonToUpdate = buttonToUpdate;
		}

		@Override
		public void actionPerformed(ActionEvent e) {
			model.action();
			buttonToUpdate.setText("Klicks: "+model.getActionCount());
		}
		
	}
}

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JScrollPane repaint(); geht nicht Java Basics - Anfänger-Themen 4
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
S Repaint() Java Basics - Anfänger-Themen 1
J Erste Schritte Mit repaint() ist Label nicht sichtbar Java Basics - Anfänger-Themen 15
S Repaint() in der Schleife funktioniert nicht immer Java Basics - Anfänger-Themen 5
H Graphics / repaint Java Basics - Anfänger-Themen 8
D Verhindern das repaint beim vergrößern aufgerufen wird Java Basics - Anfänger-Themen 9
M Liste mit repaint aktualisieren Java Basics - Anfänger-Themen 1
E Probleme mit repaint() Java Basics - Anfänger-Themen 15
K Erkennt repaint nicht Java Basics - Anfänger-Themen 1
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
G Problem mit repaint() Java Basics - Anfänger-Themen 2
J paint() vs repaint() Java Basics - Anfänger-Themen 3
C repaint wird nicht während Druck auf Maustaste ausgeführt. Java Basics - Anfänger-Themen 4
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
P [JTable] Problem mit repaint() Java Basics - Anfänger-Themen 2
P Interpreter-Fehler Im for loop funkzioniert repaint nicht :( Java Basics - Anfänger-Themen 4
M repaint() in run-Methode funktioniert nicht Java Basics - Anfänger-Themen 9
O Probleme mit der repaint-Funktion Java Basics - Anfänger-Themen 6
W repaint() ruft paint() nicht auf Java Basics - Anfänger-Themen 9
J repaint() funktioniert nicht wie gewünscht Java Basics - Anfänger-Themen 30
I Hangman CardLayout/repaint? Java Basics - Anfänger-Themen 2
H Variablen Probleme mit repaint() Java Basics - Anfänger-Themen 2
Y im applet malen ohne repaint paint ? Java Basics - Anfänger-Themen 6
J repaint(); launisch ? Java Basics - Anfänger-Themen 3
E Altes Bild bei repaint() löschen? Java Basics - Anfänger-Themen 10
Z Wie repaint() bei Uhr realisieren? Java Basics - Anfänger-Themen 12
I repaint bei jpanel Java Basics - Anfänger-Themen 10
T repaint wir nicht mehr geöffnet! Java Basics - Anfänger-Themen 38
T Canvas aktualisierung mit repaint Java Basics - Anfänger-Themen 5
C GUI aktualisieren: repaint, validate, Fenstergröße ändern bringt nichts Java Basics - Anfänger-Themen 13
Antoras Swing repaint und Nullpointer Java Basics - Anfänger-Themen 6
O repaint() wird nicht ausgeführt Java Basics - Anfänger-Themen 3
S problem mit repaint() in Thread Java Basics - Anfänger-Themen 6
Antoras swing und repaint-Ersatz Java Basics - Anfänger-Themen 8
G Automatischer repaint bei Swing so wie bei AWT? Java Basics - Anfänger-Themen 7
M Problem mit repaint Java Basics - Anfänger-Themen 2
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
T repaint einer komponente Java Basics - Anfänger-Themen 2
E repaint() aufrufen Java Basics - Anfänger-Themen 12
F paintComponent mit repaint() aufrufen Java Basics - Anfänger-Themen 27
kulturfenster Probleme mit repaint() Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
K Repaint() in Methode Java Basics - Anfänger-Themen 13
G Frage zu repaint() Java Basics - Anfänger-Themen 5
D JPanel repaint() wird nicht gemacht! Java Basics - Anfänger-Themen 7
B Problem mit repaint() Java Basics - Anfänger-Themen 8
V Reihenfolge von Befehlen - hier repaint() zu spät Java Basics - Anfänger-Themen 13
G repaint in paint aufrufen? Java Basics - Anfänger-Themen 9
F repaint() - Methode verzögern lassen? Java Basics - Anfänger-Themen 3
I Erst repaint() dann zeichnen? Java Basics - Anfänger-Themen 6
D von paint() und repaint() im Applet Java Basics - Anfänger-Themen 4
J probleme mit repaint Java Basics - Anfänger-Themen 2
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
H Wie geht eigentlich Objektorientierung? Java Basics - Anfänger-Themen 14
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
melisax Lower & Uppercase Beispielprogramm geht nicht Java Basics - Anfänger-Themen 3
MarcKKKK123 Wie geht das? Java Basics - Anfänger-Themen 1
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
N methodenaufruf for each geht nicht Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
W App geht live und dann? Java Basics - Anfänger-Themen 9
P Geht es vielleicht viel kürzer? Java Basics - Anfänger-Themen 7
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
K Erste Schritte Programm geht aus Schleife, warum? Java Basics - Anfänger-Themen 2
S Geht das bei Java ? Java Basics - Anfänger-Themen 11
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
B OCR - Rechnungserkennung, wie geht das genau? Java Basics - Anfänger-Themen 59
CptK Klassen KeyListner geht nicht Java Basics - Anfänger-Themen 7
L Klassen Objekt aus einer Warteschlange in eine andere übergeben, geht nicht? Java Basics - Anfänger-Themen 6
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
MR._FIRE_Flower String.split("(") geht nicht Java Basics - Anfänger-Themen 4
M Restbuchwert Berechnung geht nicht Java Basics - Anfänger-Themen 45
K Klassen Nachträglich ein Objekt einem anderen zuweisen, geht das? Java Basics - Anfänger-Themen 2
S int addieren geht nicht Java Basics - Anfänger-Themen 13
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
M Referenz geht bei Zwischenspeichern verloren (ArrayList) Java Basics - Anfänger-Themen 4
S Komma geht beim Schreiben ins csv verloren. Java Basics - Anfänger-Themen 6
M Arrays einspeichern geht nicht Java Basics - Anfänger-Themen 21
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
J Geht mit Java überhaupt was? Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben