JohnathanBernstein
Mitglied
hallo,
ich hab ein Problem das zwar so ähnlich dutzende male geposted wurde aber verstehen tu ichs trotzdem nich.
So! das ist der code. warum wird paintComponent nur zu beginn und am Ende eines Start aufrufes auf gerufen? das parkett wird genau einmal gezeichnet soll aber öfters gezeichnet werden.
ich hab ein Problem das zwar so ähnlich dutzende male geposted wurde aber verstehen tu ichs trotzdem nich.
Code:
package Fluxflow;
import java.awt.Graphics;
import javax.swing.JPanel;
public class meinActionPanel extends JPanel
{
private ParkettMalen pm;
meinActionPanel()
{
pm=new ParkettMalen();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
System.out.println("*********************Inside paintComponent*******************");
pm.vierEqParkettMalen(g);
}
public void setData(byte [][] parkett)
{
System.out.println("Start of actionpanel:setData");
pm.setData(parkett);
this.repaint();
try
{
Thread.sleep(250);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("End of actionpanel:setData");
}
}
Code:
package Fluxflow;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Actionframe extends JFrame
{
JButton btnStart = new JButton("Start");
JButton btnStop = new JButton("Stop");
JPanel pnlNorden = new JPanel();
meinDataPanel pnlData = new meinDataPanel();
meinActionPanel pnlAction = new meinActionPanel();
boolean stop=false;
public Actionframe()
{
super("Cirqulierende Farben");
this.setSize(1000,750);
initComponents();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
protected void initComponents()
{
//this.setLayout();
pnlNorden.setBorder(BorderFactory.createLineBorder(Color.blue, 4));
pnlData.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4));
pnlAction.setBorder(BorderFactory.createLineBorder(Color.red, 3));
this.add(pnlNorden,BorderLayout.NORTH);
this.add(pnlData,BorderLayout.EAST);
this.add(pnlAction,BorderLayout.CENTER);
btnStart.setBackground(Color.green);
btnStop.setBackground(Color.red);
btnStart.addActionListener(new MeinInnererStartListener());
btnStart.addActionListener(new MeinInnererStopListener());
pnlNorden.add(btnStart);
pnlNorden.add(btnStop);
}
private class MeinInnererStartListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent event)
{
CFGData cfgData;
cfgData = pnlData.getCFGData();
BerechneParkett bp = new BerechneParkett(cfgData);
byte[][]parkett = bp.getParkett();
pnlAction.setData(parkett);
for(int x=0; x<10; x++)
{
bp.initParkett();
parkett = bp.getParkett();
pnlAction.setData(parkett);
}
}
}
private class MeinInnererStopListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent event)
{
stop=true;
}
}
}
Code:
package Fluxflow;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
public class ParkettMalen
{
private XEckMalen xEMalen;
private int breite=0,hoehe=0;
private int grPolygon=16;
private byte [][] parkett;
private Farben f=new Farben();
public ParkettMalen()
{
xEMalen=new XEckMalen(grPolygon, 4);//Vorläufig immer quadrate;
}
public void setData(byte [][] parkett)
{
this.parkett=parkett;
breite=parkett.length;
hoehe=parkett[0].length;
}
public void vierEqParkettMalen(Graphics g)
{
for(int x=0;x<breite;x++)
{
for(int y=0;y<hoehe;y++)
{
int xZentrum = (int)Math.round((double)(x*grPolygon)+15);
int yZentrum = (int)Math.round((double)(y*grPolygon)+15);
Point pos=new Point(xZentrum,yZentrum);
Color c=f.cField[parkett[x][y]];
/*System.out.println("Feld x:"+x+" y:"+y+" Number:"+parkett[x][y]);
System.out.println(pos);
*/
xEMalen.regelMaessigesXEckMalen(g, c, pos, Math.PI/4);
}
}
}
}