3Danke
ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
751
751
EMPFEHLEN
-
19.05.11 16:02 #1
- Registriert seit
- Aug 2007
- Beiträge
- 31
hallo,
ich hab ein Problem das zwar so ähnlich dutzende male geposted wurde aber verstehen tu ichs trotzdem nich.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
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; } } }
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.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
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); } } } }
-
Es wird natuerlich nur neu gezeichnet, wenn du repaint aufrufst
Waere super wenn ihr euren Code in dieser Form einfuegt:
[JAVA]System.out.println("Test :)");[/JAVA]
wird zu:
Tabs sind uebrigens keine Feinde :)Code java:1
System.out.println("Test :)");
Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
Danke :D
-
19.05.11 16:48 #3SE Tutorials.de Gastzugang
Ich würde hier eher Graphics.update(Graphics) nehmen als Graphics.repaint() .
Ach und als Anmerkung : [code][/code] macht sich für Java nicht so super ... verwende lieber [java][/java] ... da hast du dann auch gleich Syntax-Highlightning drin wodurch sich der Source ETWAS besser lesen lässt.
-
19.05.11 19:30 #4
- Registriert seit
- Aug 2007
- Beiträge
- 31
update(Graphics) macht sich gut... ersteigt nun in paintComponent ein zeichnet aber nicht?
ich hab übrigens oben bei: meinActionPanel this.repaint() aufgerufen...
hier mein verändertes meinActionPanel(). Zeichnen tut er immer noch nicht.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
package Fluxflow; import java.awt.Graphics; import javax.swing.JPanel; public class meinActionPanel extends JPanel { private ParkettMalen pm; private Graphics iG; meinActionPanel() { pm=new ParkettMalen(); } public void paintComponent(Graphics g) { super.paintComponent(g); System.out.println("*********************Inside paintComponent*******************"); iG=g; pm.vierEqParkettMalen(g); } public void setData(byte [][] parkett) { System.out.println("Start of actionpanel:setData"); pm.setData(parkett); this.update(iG); try { Thread.sleep(150); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("End of actionpanel:setData"); } }
-
Waere super wenn ihr euren Code in dieser Form einfuegt:
[JAVA]System.out.println("Test :)");[/JAVA]
wird zu:
Tabs sind uebrigens keine Feinde :)Code java:1
System.out.println("Test :)");
Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
Danke :D
-
20.05.11 09:45 #6SE Tutorials.de Gastzugang
1) Es hätte gereicht wenn du im ersten Post den EDIT-Button genutzt hättest
2) Das Problem warum nichts gezeichnet wird ist das du Graphics.update() das iG-Graphics-Objekt übergibst ... auf das aber nichts gezeichnet wurde ... darum ist es völlig richtig das NICHTS gezeichnet wird ... weil im Graphics auch NICHTS drin ist
Du übergibst an pm.vierEqParkettMalen nur g ... updatest aber iG ... das das nicht funktioniert ist klar ...
In Java funktioniert das so nicht da bei der Anweisung iG=g; keine Referenz übergeben wird sondern eine Kopie des Graphics-Objektes. Du müsstest also wenn dann die original-Referenz übergeben damit überhaupt was ins richtige Graphics-Objekt gelangt.
-
22.05.11 12:31 #7
- Registriert seit
- Aug 2007
- Beiträge
- 31
erstens: ja er kommt öfter in die setData methode.
zweitens: sollte ich getGraphics benutzen?
-
23.05.11 10:56 #8
- Registriert seit
- Jun 2009
- Beiträge
- 870
zweitens: nein, du solltest die Graphics-Instanz nehmen, die dir beim Aufruf von paintComponent() übergeben wird.
Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
24.05.11 18:10 #9
- Registriert seit
- Aug 2007
- Beiträge
- 31
Wie?
paintComponent in der setData methode auf rufen geht nicht.
also nehm ich repaint().
klappt aber auch nicht. bis auf das letzte 'Parkett' das wird gezeichnet.
-
28.05.11 04:18 #10
- Registriert seit
- Aug 2007
- Beiträge
- 31
okay ich glaube ich pack einfach die gesamte grafik logik in paintComponent und gut is.
Ähnliche Themen
-
paintComponent + KeyListener
Von blackrose4me im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 26.03.09, 02:00 -
JSlider und paintComponent
Von M_Kay im Forum JavaAntworten: 0Letzter Beitrag: 20.07.07, 02:25 -
Serialisierung vom JPanel mit paintComponent()
Von maltor im Forum JavaAntworten: 4Letzter Beitrag: 02.02.07, 00:15 -
JButton - paintComponent()
Von MasterEvil im Forum JavaAntworten: 3Letzter Beitrag: 18.01.06, 16:20 -
paintComponent + Printable Interface?
Von Romsl im Forum JavaAntworten: 0Letzter Beitrag: 01.09.04, 23:06





Zitieren
Login





