Wann paint () aufrufen

HeinerPyt

Erfahrenes Mitglied
Hi,

ich ahbe ein kleines U-Prog. Dies fragt in einem Kleinen Fenster zwei Eingaben ab. Diese sollen dannach in der Methode paint() verarbeitet werden. Wenn ich das Programm laufen lasse, dann kommt zwar das kleine Fenster aber nicht die darin enthaltenen Labels und Eingabefelder. Wenn ich paint auskommentiere funktioniert es.

Hier mal der Code:
Code:
package Simulationen;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import layout.TableLayout;
import java.util.*;

public class biester extends Frame
{
    static biester				fenster = new biester();
	int breite					= (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
	int hoehe					= (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
	int futter					= 0;
	int biester					= 0;
	int i;					
	
	short pixelX				= 0;
	short pixelY				= 0;
	int x						= 0;
	int y						= 0;
	int Farbwert				= 0;
	
	short[] rot					= {0,64,85,106,127,148,170,191,212,233,255,249,
									243,236,230,224,217,211,204,198,192,185,179,
									173,166,160,153,147,141,134,128,122,115,109,
									102,96,90,83,77,71,64,58,51,45,39,32,26,20,
									13,7,0};
	
	short[] gruen				= {0,0,0,0,0,0,0,0,0,0,0,6,12,19,25,31,38,44,51,
									57,63,70,76,82,89,95,102,108,114,121,127,
									133,140,146,153,159,165,172,178,184,191,197,
									204,210,216,223,229,235,242,248,0};

	short[] blau				= {0,0,0,0,0,0,0,0,0,0,0,6,12,19,25,31,38,44,51,
									57,63,70,76,82,89,95,102,108,114,121,127,
									133,140,146,153,159,165,172,178,184,191,197,
									204,210,216,223,229,235,242,248,0};

	short[] rot_13				= {0,0,0,64,128,0,192,255,255,255,255,255,255};

	short[] gruen_13			= {0,0,255,64,128,255,192,0,200,175,0,255,255};

	short[] blau_13				= {0,255,255,64,128,0,192,255,0,175,0,0,255};

	
	Color Farbe					= new Color(0,0,0);
	Random r					= new Random();

	JTextField TF		= new JTextField("",4);
	JTextField TB		= new JTextField("",4);
	
	public void init_window()
	{   
		double border = 10;
		double size[][] =
	    	{{border,100, 70,border},
			{20,20,20,20,20,20}};
		
		JLabel L1			= new JLabel("Futtermenge");
		JLabel L2			= new JLabel("Anzahl Biester");
		JButton BOK = new JButton("OKAY");
		BOK.setActionCommand("B1");
		JButton BEnd = new JButton("Ende");
		BEnd.setActionCommand("B2");
 

		pack();
		fenster.setSize(250, 200);
		fenster.setTitle("Eingabe der Startwerte");
		fenster.setBackground(Color.YELLOW);
		fenster.setLayout(new TableLayout(size));
		fenster.add(L1,"1,1");
		fenster.add(L2,"1,3");
		fenster.add(TF,"2,1");
		fenster.add(TB,"2,3");
		fenster.add(BOK,"1,5");
		fenster.add(BEnd,"2,5");
		fenster.show();

	}
	
	   ActionListener al = new ActionListener()
	    {
	    	public void actionPerformed(ActionEvent e) 
	    	{
	    		if(e.getActionCommand().equals("B1"))
	    		{
	    			futter = Integer.parseInt(TF.getText());
	    			biester = Integer.parseInt(TB.getText());
	    			fenster.dispose();
	    			fenster.setSize(breite,hoehe);
	    			fenster.setTitle("Biester Simulation");
	    			fenster.setBackground(Color.WHITE);
	    		}
	    		if(e.getActionCommand().equals("B2"))
	    		{
	    			fenster.dispose();
	    		}
	    	};
	    };	

	public boolean handleEvent (Event ev)
	{
		if (ev.id == Event.WINDOW_DESTROY)
		{
			// Programm beenden
			hide();
			return true;
			
		}
		super.handleEvent(ev);
		return false;
	}
	
	public void paint(Graphics g)
	{

		for (i=1; i<futter;i++)
		{
			x = 1 + Math.abs(r.nextInt()) % 1280;
			y = 1 + Math.abs(r.nextInt()) % 1024;
			Farbe = new Color(255,0,0);
			g.setColor(Farbe);
			g.drawLine(x,y,x,y);

		}

	}
}

Noch eine zweite Frage. Wenn ich mehrer Zyklen in diesem Programm habe, wo und wie muß ich paint () dann aufrufen, das mehrmals hintereinander gezeichnet wird. 


Danke
 
Hallo,

hast du es schon mal mit paintimmediately(int x, int y, int width, int high) versucht? Hat bei mir immer besser funktionert als paint().
Die Parameter beschreiben, welcher Bereicht neugzeichnet werden soll.
 
Zuletzt bearbeitet:
Hi HeinerPyt,
die paint() routine sllte man nicht selbst aufrufen!
seit Java 1.3 sollte man sie auch nicht unbedingt überschreiben. verwende dafür lieber paintComponent().
das Java Framework ruft diese Routine dann zum gegebenen Zeitpunkt auf.

Takidoso
 
Wenn du es mit der paint(Graphics g) machen willst, musst du über die Methode noch eine Annotation @Override schreiben. Und immer wenn du this.repaint() aufrufst, wird diese paint Methode aufgerufen!

Hoffe meine vorposter sind mit dieser Lösung auch zufrieden

Mfg
 
Hallo,

die paint()-Methode wird in Swing dazu verwendet, um die Componente zu zeichnen.
D. h. wenn du sie überschreibst, musst du natürlich auch super.paint() aufrufen. Da du das nicht machst, sind die Fenster natürlich leer, da sie ja auch nicht mehr gezeichnet werden.
Die Annotation @Override ist nicht zwingend erforderlich.

MFG

Sascha
 
Zurück