tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von MiMi
  • 1 Beitrag von SE
  • 1 Beitrag von genodeftest
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
751
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    JohnathanBernstein JohnathanBernstein ist offline Mitglied Bronze
    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;      
            }
        }
    }

    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);
                }
            }
        }
    }
    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.
     

  2. #2
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Es wird natuerlich nur neu gezeichnet, wenn du repaint aufrufst
    JohnathanBernstein bedankt sich. 
    Waere super wenn ihr euren Code in dieser Form einfuegt:
    [JAVA]System.out.println("Test :)");[/JAVA]
    wird zu:
    Code java:
    1
    
    System.out.println("Test :)");
    Tabs sind uebrigens keine Feinde :)
    Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
    Danke :D

  3. #3
    SE 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.
    JohnathanBernstein bedankt sich. 

  4. #4
    JohnathanBernstein JohnathanBernstein ist offline Mitglied Bronze
    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");
        }
    }
     

  5. #5
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Zitat Zitat von SPiKEe Beitrag anzeigen
    Ich würde hier eher Graphics.update(Graphics) nehmen als Graphics.repaint()
    Hm, wo ist der Vorteil?

    Kommt er denn oefters in die setByte Methode in der du das update hast?
     
    Waere super wenn ihr euren Code in dieser Form einfuegt:
    [JAVA]System.out.println("Test :)");[/JAVA]
    wird zu:
    Code java:
    1
    
    System.out.println("Test :)");
    Tabs sind uebrigens keine Feinde :)
    Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
    Danke :D

  6. #6
    SE 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.
     

  7. #7
    JohnathanBernstein JohnathanBernstein ist offline Mitglied Bronze
    Registriert seit
    Aug 2007
    Beiträge
    31
    erstens: ja er kommt öfter in die setData methode.
    zweitens: sollte ich getGraphics benutzen?
     

  8. #8
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    zweitens: nein, du solltest die Graphics-Instanz nehmen, die dir beim Aufruf von paintComponent() übergeben wird.
    JohnathanBernstein bedankt sich. 
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  9. #9
    JohnathanBernstein JohnathanBernstein ist offline Mitglied Bronze
    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.
     

  10. #10
    JohnathanBernstein JohnathanBernstein ist offline Mitglied Bronze
    Registriert seit
    Aug 2007
    Beiträge
    31
    okay ich glaube ich pack einfach die gesamte grafik logik in paintComponent und gut is.
     

Ähnliche Themen

  1. paintComponent + KeyListener
    Von blackrose4me im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 26.03.09, 02:00
  2. JSlider und paintComponent
    Von M_Kay im Forum Java
    Antworten: 0
    Letzter Beitrag: 20.07.07, 02:25
  3. Antworten: 4
    Letzter Beitrag: 02.02.07, 00:15
  4. JButton - paintComponent()
    Von MasterEvil im Forum Java
    Antworten: 3
    Letzter Beitrag: 18.01.06, 16:20
  5. paintComponent + Printable Interface?
    Von Romsl im Forum Java
    Antworten: 0
    Letzter Beitrag: 01.09.04, 23:06

Stichworte