paintComponent

KingOfExceptions

Bekanntes Mitglied
Java:
public static void main(String[]args)
{
	  
	  frm.setSize( 1024, 200);
	  frm.setVisible( true );
	  
}

public void spielf()
{
	
	  JFrame spielfeld=new JFrame("DAS SPIELFELD");
	  
	  spielfeld.setSize(1024, 680);
	  
	  spielfeld.pack();
	  spielfeld.setVisible(true);
	  Thread th = new Thread();
	  th.start();
	  
}

public void paintComponents(Graphics g) {
	super.paintComponents(g);
	
	g.setColor(Color.red);
	g.drawString("Zeit: " + Long.toString(zaehler), 20, 10);
	repaint();

	}

Das hier oben ist der (wahrscheinlich) fehlerhafte code.
hier zu meinen problemen: -aus irgendeinem grund hat "spielfeld" nicht 1024 und 680 als size
- es wird in keinem fenster "Zeit:" + zaehler angezeigt....

kann mir da jemand helfen?
 

XHelp

Top Contributor
Was ist das für eine Klasse? Du erstellst ein reinen JFrame und packst nichts drauf, was soll da denn wo und durch wen gezeichnet werden? :bahnhof:
 

KingOfExceptions

Bekanntes Mitglied
Java:
import java.awt.*;
import java.awt.event.*;
import java.util.*;

import javax.swing.*;


class Raster extends JFrame implements ActionListener

{
	
	Scanner scan=new Scanner(System.in);
	
private static final long serialVersionUID = 1L;


JButton startbutton ; 
JButton exitbutton;
JButton regis;
JButton anme;
JButton abmelden;
JFrame frame;

JTextField benutzer;
JLabel banmeldung;
JTextField pass;
JLabel panmeldung;
JTextField benutzerr;
JLabel baufforderung;
JTextField passwort;
JLabel paufforderung;
int anzahl=100; //TEMPORÄRE MAXIMALE ANZAHL AN SPIELERN
JDialog dialogr=new JDialog((JFrame) frame, "Registrierung", true);
JDialog dialoga=new JDialog((JFrame) frame, "Anmeldung", true);
Vector<String> namen=new Vector<String>(50, 50);
int x=0; //"SPIELERNUMMER"
int y=0; //ZAEHLER FUER VERGLEICH PASSWORT
int z=0; //ZAEHLER FUER VERGLEICH BENUTZERNAME
JLabel benutzernichtda= new JLabel("Der Benutzername ist falsch");
boolean angemeldet=false;
static Raster frm = new Raster ("Das Raster");
long zaehler=0;


Raster(String title)
  {
    super( title );                     
    setLayout( new FlowLayout() );     
       
    startbutton = new JButton("Hier klicken um das Spiel zu Starten!"); 
    startbutton.addActionListener(this);    
    add( startbutton );                    
    
    exitbutton= new JButton("EXIT");
    exitbutton.addActionListener(this);
    add (exitbutton);
    
    regis=new JButton("Registrieren");
    regis.addActionListener(this);
    add(regis);
    
    anme=new JButton("Anmeldung");
    anme.addActionListener(this);
    add(anme);
    
    
  }

	
public static void main(String[]args)
{
	  
	  frm.setSize( 1024, 200);
	  frm.setVisible( true );
	  
}

public void spielf()
{
	
	  JFrame spielfeld=new JFrame("DAS SPIELFELD");
	  
	  spielfeld.setSize(1024, 680);
	  
	  spielfeld.pack();
	  spielfeld.setVisible(true);
	  Thread th = new Thread();
	  th.start();
	  
}

public void paintComponents(Graphics g) {
	
	super.paintComponents(g);
	
	g.setColor(Color.red);
	g.drawString("Zeit: " + Long.toString(zaehler), 20, 10);
	repaint();

	}

reicht dann dieser teil?
 

XHelp

Top Contributor
- Hast du eine Klasse, die Thread heißt? Wenn ja, dann ist es äußerst ungünstig gewählter Name.
- Wozu brauchst du eine statische Referenz auf dein Raster?
- paintComponents solltest du nicht überschreiben
- in den "DAS SPIELFELD"-Fenstern (die in einer Methode erstellt werden, die nicht aufgerufen wird) soll ja auch nichts gezeichnet werden, denn das sind ja normale JFrames.
 

KingOfExceptions

Bekanntes Mitglied
-dann schein ich da ja mal was GANZ falsch verstanden zu haben..... :autsch:

- ich möchte dass wenn ich auf diesen button drücke:
Java:
startbutton = new JButton("Hier klicken um das Spiel zu Starten!");

ein neues fenster öffnet in das ich dann etwas machen kann, ohne einen JDialog zu benutzen....

also einen JFrame wie auch schon "Das Raster" nur ohne die ganzen buttons.....

EDIT: im prinzip möchte ich das hier:

Java:
import java.awt.*;
import javax.swing.*;

public class GamePanel extends JPanel{

	private static final long	serialVersionUID	= 1L;
	JFrame frame;
	long fps 		  = 0; 
  
	public static void main(String[] args){
		new GamePanel(800,600);
	}
	
	public GamePanel(int w, int h){
		this.setPreferredSize(new Dimension(w,h));
		this.setBackground(Color.BLUE);
		frame = new JFrame("GameDemo");
		frame.setLocation(100,100);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(this);
		
		frame.pack();
		frame.setVisible(true);
		
	
		Thread th = new Thread();
		th.start();
	}
	

	public void paintComponent(Graphics g) {
		super.paintComponent(g);		
		g.setColor(Color.red);
		g.drawString("FPS: " + Long.toString(fps), 20, 10);
		
	
		}

}

nur halt wenn man auf den "startbutton " drückt
 

XHelp

Top Contributor
Versteh ich dennoch nicht.
Aber nicht ein Haufen
Code:
extends JFrame
Sachen zu machen, sondern
Code:
extends JPanel
zu machen könnte durch aus Sinn ergeben. Die kannst du dann einem ganz normalem JFrame hinzufügen. Aber vieles aus dem Code ist fraglich, merkwürdig und unvollständig als man da die Idee dahinter verstehen könnte
 

KingOfExceptions

Bekanntes Mitglied
die antwort hab ich nicht so ganz verstanden :bahnhof:

kannst du mir sagen wie ich das hier:

Java:
import java.awt.*;
import javax.swing.*;

public class GamePanel extends JPanel{

	private static final long	serialVersionUID	= 1L;
	JFrame frame;
	long fps 		  = 0; 
  
	public static void main(String[] args){
		new GamePanel(800,600);
	}
	
	public GamePanel(int w, int h){
		this.setPreferredSize(new Dimension(w,h));
		this.setBackground(Color.BLUE);
		frame = new JFrame("GameDemo");
		frame.setLocation(100,100);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(this);
		
		frame.pack();
		frame.setVisible(true);
		
	
		
	}
	

	public void paintComponent(Graphics g) {
		super.paintComponent(g);		
		g.setColor(Color.red);
		g.drawString("FPS: " + Long.toString(fps), 20, 10);
		
	
		}

}

mit dem hier:

Java:
startbutton = new JButton("Hier klicken um das Spiel zu Starten!");

verbinde? hoffentlich hab ich mich verständlich ausgedrückt..... :(
 

XHelp

Top Contributor
So ungefähr habe ich die, von dir gewollte, Logik verstanden:
Java:
//-------------------------------------
public class MainGUI {
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.setSize(100, 100);
		frame.add(new StartPanel());
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
}
//-------------------------------------
public class StartPanel extends JPanel{
	public StartPanel() {
		JButton btn = new JButton("Click me!");
		btn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				JFrame frame = new JFrame();
				frame.setSize(300,300);
				frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
				StatusPanel panel = new StatusPanel();
				frame.add(panel);
				frame.setVisible(true);
				
				Thread t = new Thread(new UpdateThread(panel));
				t.start();
			}
		});
		add(btn);
	}
}
//-------------------------------------
public class StatusPanel extends JPanel {
	private int fps;

	public int getFps() {
		return fps;
	}

	public void setFps(int fps) {
		this.fps = fps;
		repaint();
	}

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.setColor(Color.red);
		g.drawString("FPS: " + Long.toString(fps), 20, 10);
	}
}
//-------------------------------------
public class UpdateThread implements Runnable {
	private StatusPanel panel;

	public UpdateThread(StatusPanel panel) {
		super();
		this.panel = panel;
	}

	@Override
	public void run() {
		while (panel.isShowing()) {
			try {
				System.out.println("write");
				panel.setFps((int) (Math.random() * 100000));
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}

Aber es macht auch durch aus Sinn nicht "Ok, hier hast du mal FPS, zeichne es mal" zu machen, sondern "ok, ich zeichne neu, gib mir mal die aktuelle FPS" (Stichwort MVC, MVP)
 
Zuletzt bearbeitet:

KingOfExceptions

Bekanntes Mitglied
Ok vielen dank!!!:toll: das müsste so stimmen. Ich probiere morgen das auf mein Programm zu übertragen. Wenn ich noch probleme hab melde ich mich einfach Wieder hier. Bis dahin Stelle ich dieses Thema mal auf erledigt. Nochmals danke!!!:D :toll::applaus: war echt nett!!!!
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
H Programmaufbau in Ordnung? Problem mit paintComponent() Java Basics - Anfänger-Themen 10
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
S Rectangles ausserhalb der paintComponent drawen! Java Basics - Anfänger-Themen 9
M Problem mit paintComponent Java Basics - Anfänger-Themen 6
M PaintComponent Java Basics - Anfänger-Themen 9
J Wer oder was ruft die "paintComponent()" Methode auf? Java Basics - Anfänger-Themen 19
K paintComponent Java Basics - Anfänger-Themen 23
G paintComponent wird nicht ausgeführt Java Basics - Anfänger-Themen 4
kulturfenster paintComponent wird nicht aufgerufen Java Basics - Anfänger-Themen 16
kulturfenster Frage bez paintComponent Java Basics - Anfänger-Themen 5
kulturfenster super.paintComponent(g); Java Basics - Anfänger-Themen 3
G fehler bei paintComponent Java Basics - Anfänger-Themen 6
kulturfenster paintComponent und Timer Java Basics - Anfänger-Themen 2
W Weitere Parameter in die paintComponent()-Methode übergeben? Java Basics - Anfänger-Themen 7
ElViZ paintComponent in den Vordergrund? Java Basics - Anfänger-Themen 2
F paintComponent mit repaint() aufrufen Java Basics - Anfänger-Themen 27
M paintComponent() in abstrakter und vererbender Klasse Java Basics - Anfänger-Themen 3
G paintComponent(Graphics g) Java Basics - Anfänger-Themen 2
V KSKB zum Verständnis von Graphics und paintComponent Java Basics - Anfänger-Themen 6
G paintComponent neu zeichnen Java Basics - Anfänger-Themen 5
S paintComponent, neue Instanz überschreibt wohl alte Instanz Java Basics - Anfänger-Themen 6
G Exception in PaintComponent Java Basics - Anfänger-Themen 2
U BufferedImage anzeigen, imageIcon oder paintComponent(); Java Basics - Anfänger-Themen 6
G probleme mit paintComponent Java Basics - Anfänger-Themen 14
M Probleme mit JPanel und paintComponent Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben