Swing Null Pointer Exception obwohl Objekt initialisiert

Alex2013

Bekanntes Mitglied
Hallo Leute,

ich wollte heute ein Programm erweitern, so dass dieses über ein Panel wechsel verschiedene Inhalte anzeigt oder auch nicht mehr anzeigt. Das funktioniert soweit auch.
Aber wenn das entsprechende Panel die Inhalte anzeigt, können diese nicht mehr benutzt werden. Hier wird die Exception geworfen, obwohl das Programm vorher einwandfrei funktioniert hat.
Ich habe den Code auch bereits einige Male verändert um die Exception zu verhindern. Dies hat jedoch nicht geklappt.
Ich habe insgesamt zwei Klassen.
Ich habe es auch mit der zweiten innerhalb der ersten Klasse versucht. Dies hat nicht geholfen.
Aktuell sieht es wieder so aus, wie es vorher war...
Hat hier jemand einen Tipp, wie ich den Code umstellen muss?

Code:

Java:
public class MeinPaint extends JFrame
{
    private static final long serialVersionUID = 1L;
    JFrame frame;
    JPanel hauptpanel,zeichenPanel,anzeigePanel;
  
  
    public MeinPaint() {
      
        frame=new JFrame("Mein Paint Programm");
        frame.setSize(1000, 700);
        frame.setLocationRelativeTo(null);
        frame.setLayout(new BorderLayout());
      
        //Hierdrauf wird alles hinzugefügt
        Container c=frame.getContentPane();

        JButton malen,zeichnungenAnzeigen;
        malen=new JButton("Malen");zeichnungenAnzeigen=new JButton("Zeichnungen anzeigen");
              
        //Hierdrauf wird gezeichnet
        zeichenPanel=new JPanel();
        zeichenPanel.setVisible(false);
              
        //Hier wird das Auswahlpanel angelegt
        hauptpanel=new JPanel();
        hauptpanel.setVisible(true);
        hauptpanel.setLayout(new GridLayout(2, 1));
      
        //Das Anzeigepanel für die existierenden Zeichnungen wird erstellt
        anzeigePanel=new JPanel();
        anzeigePanel.setVisible(false);
      
        //Auch das Anzeigepanel ist zunächst nicht sichtbar
        c.add(anzeigePanel);
        anzeigePanel.setVisible(false);
      
        //Nur das Hauptpanel ist zuerst sichtbar
        c.add(hauptpanel);
        hauptpanel.setVisible(true);
      
        //Hinzufügen der Drawklasse
        final Drawing draw=new Drawing();
        draw.setSize(880, 700);
        zeichenPanel.add(draw,BorderLayout.CENTER);
      
        //Die Buttons werden angelegt
        hauptpanel.add(malen);//=new JButton("Malen"));
        malen.setPreferredSize(new Dimension(80, 60));
        malen.setSize(80, 60);
      
        hauptpanel.add(zeichnungenAnzeigen);//=new JButton("Zeichnungen anzeigen"));
        zeichnungenAnzeigen.setPreferredSize(new Dimension(80,60));
        zeichnungenAnzeigen.setSize(80, 60);
      
        //Das Panel wird angelegt
        zeichenPanel=new JPanel();
        zeichenPanel.setVisible(false);
        zeichenPanel.setSize(120, 700);
        zeichenPanel.setMinimumSize(new Dimension(75, 55));
        zeichenPanel.setMaximumSize(new Dimension(85, 65));
        zeichenPanel.setLayout(new GridLayout(11, 1));
        c.add(zeichenPanel,BorderLayout.WEST);

//Bei diesem Button wird die Exception geworfen -> bei draw.Blau();
JButton blau=new JButton("blau");
        blau.setPreferredSize(new Dimension(80, 60));
        blau.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Blau();
            }
        });

//Beispielhaft gezeigt, dass der Button hinzugefügt wurde. ebenso wie bei den anderen //Buttons.
zeichenPanel.add(blau);

//In der Klasse Drawing, welche sich nicht innerhalb der oben angegebenen befindet...
class Drawing extends JComponent
{
Graphics2D g2d;
public void paintComponent(Graphics g)
    {
        if(img==null)
        {
            img=createImage(getSize().width,getSize().height);
            g2d=(Graphics2D) img.getGraphics();
            clear();
        }
        g.drawImage(img, 0, 0, null);
    }
//Hier ist natürlich noch mehr Code vorhanden, dient aber nur anderen Komponenten.
public void Blau()
    {
        g2d.setPaint(Color.BLUE); //Hier wird die Exception geworfen.
        repaint();
    }
}

Exception:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at MeinPaint$Drawing.Blau(MeinPaint.java:298)
at MeinPaint$4.actionPerformed(MeinPaint.java:125)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)

Hat hier jemand einen Tipp? Wie gesagt, einige Varianten habe ich bereits versucht. Das schlug jedoch fehl :-(
 
Zuletzt bearbeitet von einem Moderator:

Alex2013

Bekanntes Mitglied
@Meniskusschaden: auch wenn ich g2d an sich initialisiere funktioniert die Anwendung nicht mehr.
Es wird zwar keine Exception mehr geworfen, aber auch nichts mehr gezeichnet, wie es vorher der Fall war.
Wo liegt mein Fehler?
 

Meniskusschaden

Top Contributor
Ich glaube, du musst einfach deinen Code aufräumen. Beispielsweise weist du ein JPanel der Variablen zeichenPanel zu und fügst ein Drawing-Objekt hinzu. Kurz danach wirfst du das Panel wieder weg und erzeugst ein neues JPanel, das du zeichenPanel zuweist. Dieses Mal aber ohne Drawing. Du fügst keines dieser Panel einem deiner beiden JFrames hinzu.
 

Alex2013

Bekanntes Mitglied
Ich habe den einen Fehler gesehen. Danke dafür. Das habe ich korrigiert. Das JPanel ist jetzt nicht mehr mehrfach vorhanden.
Ich habe ein bestimmtes Layout vor. Daher habe ich dafür mehrere Panels hintereinander geschaltet.
Mein Frame wird über einen Container deklariert. siehe Code ganz oben.

Jetzt hat sich zwar aktuell die Ansicht etwas geändert, aber gezeichnet wird dafür immer noch nichts...
wie gesagt, der Code hat sich nicht viel verändert. Aktuell habe ich nur das Panel gelöscht. Vorher hatte es auch funktioniert.

Wüsstest du sonst noch, woran es liegen könnte, dass nichts mehr gezeichnet wird?
 

Alex2013

Bekanntes Mitglied
Das bsp. folgt dann hier. Das ist compilierfähig.
Ich habe die eine Klasse zunächst in drei einzelne aufgeteilt.
Klasse1:
Java:
public class MeinPaint extends JFrame
{
    private static final long serialVersionUID = 1L;
    JFrame frame;
    JPanel hauptpanel,zeichenPanel,anzeigePanel;
  
    //Zeichnungen anzeigen
    String []objekte={"Rechteck","Oval","Arc","ROA zeichnen","Alle zeichnen","Punkt 1","Punkt 2","Linie","Acht"};
    JComboBox objektAuswahl=new JComboBox(objekte);
    JButton annehmen=new JButton("annehmen"),loeschen=new JButton("loeschen");
    JRadioButton fuellen=new JRadioButton("füllen");
    Random rd=new Random();
  
    JPanel zeichnen=new JPanel();
    JPanel layout=new JPanel();
    Zeichen zeichen=new Zeichen();
  
    public MeinPaint() {
        //Das Hauptframe wird erstellt
        frame=new JFrame("Mein Paint Programm");
        frame.setSize(1000, 750);
        frame.setLocationRelativeTo(null);
        frame.setLayout(new BorderLayout());
      
        //Hierdrauf wird alles hinzugefügt
        Container c=frame.getContentPane();

        //zurück button
        JButton zurueck2=new JButton("zurück2");
        //Die zwei Hauptmenübuttons werden hinzugefügt
        JButton malen,zeichnungenAnzeigen;
        malen=new JButton("Malen");zeichnungenAnzeigen=new JButton("Zeichnungen anzeigen");
              
        //Hierdrauf wird gezeichnet
        zeichenPanel=new JPanel();
        zeichenPanel.setLayout(new GridLayout(11, 1));
        zeichenPanel.setSize(100, 700);
        zeichenPanel.setMinimumSize(new Dimension(75, 55));
        zeichenPanel.setMaximumSize(new Dimension(85, 65));
        zeichenPanel.setVisible(false);
              
        //Hier wird das Auswahlpanel angelegt
        hauptpanel=new JPanel();
        hauptpanel.setVisible(true);
        hauptpanel.setLayout(new GridLayout(2, 1));
      
        //Das Anzeigepanel für die existierenden Zeichnungen wird erstellt
        anzeigePanel=new JPanel();
        anzeigePanel.setVisible(false);
      
        //das anzeigepanel wird hinzugefügt
        c.add(anzeigePanel);
        anzeigePanel.setLayout(new BorderLayout());
      
        //Nur das Hauptpanel ist zuerst sichtbar
        c.add(hauptpanel);
        hauptpanel.setVisible(true);
      
        //Hinzufügen der Drawklasse
        final Drawing draw=new Drawing();
        draw.setSize(880, 700);
        zeichenPanel.add(draw,BorderLayout.CENTER);
      
        //Die Buttons werden angelegt
        hauptpanel.add(malen);//=new JButton("Malen"));
        malen.setPreferredSize(new Dimension(80, 60));
        malen.setSize(80, 60);
        //Hier auch noch
        hauptpanel.add(zeichnungenAnzeigen);//=new JButton("Zeichnungen anzeigen"));
        zeichnungenAnzeigen.setPreferredSize(new Dimension(80,60));
        zeichnungenAnzeigen.setSize(80, 60);
      
        //Das Panel wird dem Frame hinzugefügt
        c.add(zeichenPanel,BorderLayout.WEST);
      
        //Die Listener werden registriert
        malen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                hauptpanel.setVisible(false);
                zeichenPanel.setVisible(true);
                anzeigePanel.setVisible(false);
            }
        });
        //ebenso
        zeichnungenAnzeigen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                hauptpanel.setVisible(false);
                zeichenPanel.setVisible(false);
                anzeigePanel.setVisible(true);
            }
        });
      
        //der zurück Button wird eingefügt
        JButton zurueck=new JButton("zurück");
        zurueck.setPreferredSize(new Dimension(80, 60));
        zurueck.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                hauptpanel.setVisible(true);
                zeichenPanel.setVisible(false);
                anzeigePanel.setVisible(false);
            }
        });
      
        //Die Farbbuttons werden erstellt
        JButton blau=new JButton("blau");
        blau.setPreferredSize(new Dimension(80, 60));
        blau.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Blau();
            }
        });
  
        JButton gruen=new JButton("grün");
        gruen.setPreferredSize(new Dimension(80, 60));
        gruen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Gruen();
            }
        });
      
        JButton rot=new JButton("rot");
        rot.setPreferredSize(new Dimension(80, 60));
        rot.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Rot();
            }
        });
      
        JButton gelb=new JButton("gelb");
        gelb.setPreferredSize(new Dimension(80, 60));
        gelb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Gelb();
            }
        });
      
        JButton schwarz=new JButton("blk");
        schwarz.setPreferredSize(new Dimension(80, 60));
        schwarz.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Schwarz();
            }
        });
      
        JButton cyan=new JButton("cyan");
        cyan.setPreferredSize(new Dimension(80, 60));
        cyan.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Cyan();
            }
        });
      
        JButton magenta=new JButton("mg");
        magenta.setPreferredSize(new Dimension(80, 60));
        magenta.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Magenta();
            }
        });
      
        JButton pink=new JButton("pink");
        pink.setPreferredSize(new Dimension(80, 60));
        pink.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Pink();
            }
        });
      
        JButton grau=new JButton("grau");
        grau.setPreferredSize(new Dimension(80, 60));
        grau.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Grau();
            }
        });
      
        //der löschen button wird erstellt
        JButton loeschen=new JButton("C");
        loeschen.setPreferredSize(new Dimension(80, 60));
        loeschen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.clear();
            }
        });
      
        //alle Buttons werden der Zeichenfläche hinzugefügt
        zeichenPanel.add(blau);
        zeichenPanel.add(gruen);
        zeichenPanel.add(rot);
        zeichenPanel.add(gelb);
        zeichenPanel.add(schwarz);
        zeichenPanel.add(cyan);
        zeichenPanel.add(magenta);
        zeichenPanel.add(pink);
        zeichenPanel.add(grau);
        zeichenPanel.add(loeschen);
        zeichenPanel.add(zurueck);
      
        zeichenPanel.setBackground(Color.LIGHT_GRAY);
      
        //Anzeigepanel wird bearbeitet
        anzeigePanel.add(layout, BorderLayout.NORTH);
        anzeigePanel.add(zeichen,BorderLayout.CENTER);
        layout.setLayout(new GridLayout(1, 5));
        layout.add(objektAuswahl,BorderLayout.NORTH);
        layout.add(annehmen,BorderLayout.NORTH);
        layout.add(fuellen, BorderLayout.NORTH);
        layout.add(zurueck2=new JButton("zurück"));
        zurueck2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                anzeigePanel.setVisible(false);
                zeichenPanel.setVisible(false);
                hauptpanel.setVisible(true);
            }
        });
        objektAuswahl.setSize(getWidth()/2,50);
        annehmen.setSize(getWidth()/2,50);
        annehmen.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                zeichen.setFuellstatus(fuellen.isSelected());
                zeichen.setAuswahl(objektAuswahl.getSelectedIndex());
                zeichen.repaint();  
            }
        });
      
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
  
    public static void main(String[] args)
    {
        new MeinPaint();
    }

}
Klasse2:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Polygon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JRadioButton;


public class Zeichen extends JPanel{
        private static final long serialVersionUID = 1L;
        int auswahl;
        boolean stat=false;
  
      
      
      
        public Zeichen()
        {
            auswahl=10;
            setVisible(true);
        }
      
        public void setFuellstatus(boolean f)
        {
            stat=f;
        }
      
        public void setAuswahl(int a)
        {
            auswahl=a;
        }
      
        @SuppressWarnings("unused")
        public void paint(Graphics g) {
            //TODO Auto-generated method stub
            g.setColor(Color.WHITE);
            g.fillRect(0, 0, getWidth(), getHeight());
            g.setColor(Color.BLACK);
            //x Linie
            g.drawLine(getWidth()-getWidth(), getHeight()/2, getWidth(), getHeight()/2);
            //y Linie
            g.drawLine(getWidth()/2, getHeight()-getHeight(), getWidth()/2, getHeight());
          
            switch(auswahl)
            {
                case 0:
                    if(stat)
                    {
                        g.fillRect(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3));//*2 50, 150, 150);
                    }
                    else
                        g.drawRect(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3));//(50, 50, 150, 150);
                        break;
                case 1:
                    if(stat)
                    {
                        g.fillOval(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3));//(50, 50, 150, 150);
                    }
                    else
                        g.drawOval(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3));//(50, 50, 150, 150);
                    break;
                case 2:
                    if(stat)
                    {
                        g.fillArc(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3), 100, 100);
                    }
                    else
                        g.drawArc(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3), 100, 100);
                    break;
                    //alle zusammen zeichnen
                case 3:
                    if(stat)
                    {
                        g.fillRect(50,50,100,100);
                        g.fillOval(50,350,100,100);
                        g.fillArc((getWidth()/3)*2,50, 100, 100, 250, 250);
                    }
                    else
                    {
                        g.drawRect(50,50,100,100);
                        g.drawOval(50,350,100,100);
                        g.drawArc((getWidth()/3)*2,50, 100, 100, 250, 250);
                    }
                    break;
                case 4:
                    if(stat)
                    {
                        g.fillRect(5, 5, 155, 205);
                        g.fillArc(100, 100, 250, 250, 20, 20);
                        g.fillOval(270, 270, 50, 50);
                        g.fill3DRect(350, 350, 150, 100, true);
                        g.fillPolygon(new Polygon());
                    }
                    else
                    {
                        g.drawRect(5,5, 155, 205);
                        g.drawArc(100, 100, 250, 250, 20, 20);
                        g.drawOval(270, 270, 50, 50);
                        g.draw3DRect(350, 350, 150, 100, true);
                        g.drawPolygon(new Polygon());
                    }
                    break;
                case 5:
                    g.drawString("o", getWidth()/2, getHeight()/2);
                    break;
                case 6:
                    g.drawString("o", getWidth()/3, getHeight()/3);
                    g.drawString("o", (getWidth()/3)*2,(getHeight()/3)-((getHeight()/3)/3));
                    break;
                case 7:
                    int x1=getWidth()/3;int y1=getHeight()/3;
                    int x2=(getWidth()/3)*2;int y2=(getHeight()/3)-((getHeight()/3)/3);
                    g.drawLine(x1,y1,x2,y2);
                    break;
                case 8:
                    if(stat)
                    {
                        g.fillOval(getWidth()-(getWidth()/4),getHeight()-(getHeight()/4),getWidth()/2,getHeight()/2);
                        g.fillOval(getWidth()-(getWidth()/4),getHeight()-(getHeight()/4),getWidth()/2,getHeight()/2);
                    }
                    else
                    {
                        g.drawOval(getWidth()-(getWidth()+(getWidth()/4)),getHeight()-((getHeight()/4)*3),getWidth()/2,getHeight()/2);
                        g.drawOval(getWidth()-((getWidth()/4)*3),getHeight()-((getHeight()/4)*3),getWidth()/2,getHeight()/2);
                    }
            }
        }
}
Klasse3:
Java:
/*--------------------------WICHTIG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!------------------------------------------------------*/
public class Drawing extends JComponent
{
        //Auf WAS! möchte ich zeichnen
        Image img;
        //Mit WAS! möchte ich zeichnen
        Graphics2D g2d=new Graphics2D() {
          
            @Override
            public void setXORMode(Color c1) {
            }
          
            @Override
            public void setPaintMode() {
            }
          
            @Override
            public void setFont(Font font) {
            }
          
            @Override
            public void setColor(Color c) {
            }
          
            @Override
            public void setClip(int arg0, int arg1, int arg2, int arg3) {
            }
          
            @Override
            public void setClip(Shape arg0) {
            }
          
            @Override
            public FontMetrics getFontMetrics(Font arg0) {
                return null;
            }
          
            @Override
            public Font getFont() {
                return null;
            }
          
            @Override
            public Color getColor() {
                return null;
            }
          
            @Override
            public Rectangle getClipBounds() {
                return null;
            }
          
            @Override
            public Shape getClip() {
                return null;
            }
          
            @Override
            public void fillRoundRect(int arg0, int arg1, int arg2, int arg3, int arg4,
                    int arg5) {
            }
          
            @Override
            public void fillRect(int arg0, int arg1, int arg2, int arg3) {
            }
          
            @Override
            public void fillPolygon(int[] arg0, int[] arg1, int arg2) {
            }
          
            @Override
            public void fillOval(int arg0, int arg1, int arg2, int arg3) {
            }
          
            @Override
            public void fillArc(int arg0, int arg1, int arg2, int arg3, int arg4,
                    int arg5) {
            }
          
            @Override
            public void drawRoundRect(int arg0, int arg1, int arg2, int arg3, int arg4,
                    int arg5) {
            }
          
            @Override
            public void drawPolyline(int[] arg0, int[] arg1, int arg2) {
            }
          
            @Override
            public void drawPolygon(int[] arg0, int[] arg1, int arg2) {
            }
          
            @Override
            public void drawOval(int arg0, int arg1, int arg2, int arg3) {
            }
          
            @Override
            public void drawLine(int arg0, int arg1, int arg2, int arg3) {
            }
          
            @Override
            public boolean drawImage(Image arg0, int arg1, int arg2, int arg3,
                    int arg4, int arg5, int arg6, int arg7, int arg8, Color arg9,
                    ImageObserver arg10) {
                return false;
            }
          
            @Override
            public boolean drawImage(Image arg0, int arg1, int arg2, int arg3,
                    int arg4, int arg5, int arg6, int arg7, int arg8, ImageObserver arg9) {
                // TODO Auto-generated method stub
                return false;
            }
          
            @Override
            public boolean drawImage(Image arg0, int arg1, int arg2, int arg3,
                    int arg4, Color arg5, ImageObserver arg6) {
                // TODO Auto-generated method stub
                return false;
            }
          
            @Override
            public boolean drawImage(Image arg0, int arg1, int arg2, int arg3,
                    int arg4, ImageObserver arg5) {
                // TODO Auto-generated method stub
                return false;
            }
          
            @Override
            public boolean drawImage(Image arg0, int arg1, int arg2, Color arg3,
                    ImageObserver arg4) {
                // TODO Auto-generated method stub
                return false;
            }
          
            @Override
            public boolean drawImage(Image arg0, int arg1, int arg2, ImageObserver arg3) {
                // TODO Auto-generated method stub
                return false;
            }
          
            @Override
            public void drawArc(int arg0, int arg1, int arg2, int arg3, int arg4,
                    int arg5) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void dispose() {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public Graphics create() {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public void copyArea(int arg0, int arg1, int arg2, int arg3, int arg4,
                    int arg5) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void clipRect(int arg0, int arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void clearRect(int arg0, int arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void translate(double tx, double ty) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void translate(int x, int y) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void transform(AffineTransform Tx) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void shear(double shx, double shy) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void setTransform(AffineTransform Tx) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void setStroke(Stroke s) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void setRenderingHints(Map<?, ?> hints) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void setRenderingHint(Key hintKey, Object hintValue) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void setPaint(Paint paint) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void setComposite(Composite comp) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void setBackground(Color color) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void scale(double sx, double sy) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void rotate(double theta, double x, double y) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void rotate(double theta) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public boolean hit(Rectangle rect, Shape s, boolean onStroke) {
                // TODO Auto-generated method stub
                return false;
            }
          
            @Override
            public AffineTransform getTransform() {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public Stroke getStroke() {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public RenderingHints getRenderingHints() {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public Object getRenderingHint(Key hintKey) {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public Paint getPaint() {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public FontRenderContext getFontRenderContext() {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public GraphicsConfiguration getDeviceConfiguration() {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public Composite getComposite() {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public Color getBackground() {
                // TODO Auto-generated method stub
                return null;
            }
          
            @Override
            public void fill(Shape s) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void drawString(AttributedCharacterIterator iterator, float x,
                    float y) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void drawString(AttributedCharacterIterator iterator, int x, int y) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void drawString(String str, float x, float y) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void drawString(String str, int x, int y) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void drawRenderedImage(RenderedImage img, AffineTransform xform) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void drawRenderableImage(RenderableImage img, AffineTransform xform) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) {
                // TODO Auto-generated method stub
                return false;
            }
          
            @Override
            public void drawGlyphVector(GlyphVector g, float x, float y) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void draw(Shape s) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void clip(Shape s) {
                // TODO Auto-generated method stub
              
            }
          
            @Override
            public void addRenderingHints(Map<?, ?> arg0) {
                // TODO Auto-generated method stub
              
            }
        };
        //WAS! sind die Werte
        int currentX,currentY,oldX,oldY;
//        MeinPaint mp=null;
      
        public Drawing()
        {
            addMouseListener(new MouseAdapter()
            {
                public void mousePressed(MouseEvent e)
                {
                    oldX=e.getX();
                    oldY=e.getY();
                }
                public void mouseClicked(MouseEvent e)
                {
                    currentX=e.getX();
                    currentY=e.getY();
                }
            });
              
            addMouseMotionListener(new MouseMotionAdapter()
            {
                public void mouseDragged(MouseEvent e)
                {
                    currentX=e.getX();
                    currentY=e.getY();
                    g2d.drawLine(oldX,oldY,currentX,currentY);
                    oldX=currentX;
                    oldY=currentY;
                    repaint();
                }
            });
        }

        public void paintComponent(Graphics g)
        {
            if(img==null)
            {
                img=createImage(getSize().width,getSize().height);
                g2d=(Graphics2D) img.getGraphics();
                clear();
            }
            g.drawImage(img, 0, 0, null);
        }
      
        //In der clear Methode wir zunächst die Farbe weiß gesetzt. Dann ein weißes Rechteckt gemalt und anschließend die Farbauswahl
        //wieder auf schwarz gesetzt
        public void clear()
        {
            g2d.setPaint(Color.WHITE);
            g2d.fillRect(0, 0, getWidth(), getHeight());
            g2d.setPaint(Color.BLACK);
            repaint();
        }
      
        public void Blau()
        {
            g2d.setPaint(Color.BLUE);
            repaint();
        }
      
        public void Gruen()
        {
            g2d.setPaint(Color.GREEN);
            repaint();
        }
      
        public void Rot()
        {
            g2d.setPaint(Color.RED);
            repaint();
        }
      
        public void Gelb()
        {
            g2d.setPaint(Color.YELLOW);
            repaint();
        }
      
        public void Schwarz()
        {
            g2d.setPaint(Color.BLACK);
            repaint();
        }
      
        public void Cyan()
        {
            g2d.setPaint(Color.CYAN);
            repaint();
        }
      
        public void Magenta()
        {
            g2d.setPaint(Color.MAGENTA);
            repaint();
        }
      
        public void Pink()
        {
            g2d.setPaint(Color.PINK);
            repaint();
        }
      
        public void Grau()
        {
            g2d.setPaint(Color.GRAY);
            repaint();
        }
}

Das Bsp. sieht vlt. viel aus, ist aber compilierfähig. Ich habe des Platzes halber, die Klassenbibliotheken z.T. weggelassen.
 
Zuletzt bearbeitet von einem Moderator:

Alex2013

Bekanntes Mitglied
-.-
Ich auch wie ich gerade festgestellt habe. Das ist aber nicht der Sinn...
Ich begebe mich mal auf fehlersuche.
Falls dir etwas auffällt, wäre es super wenn du es mir in der Zwischenzeit mitteilen könntest... :)
 

Alex2013

Bekanntes Mitglied
Wenn ich den Konstruktor der Hauptklasse wie folgt fülle, dann kann ich zwar zeichnen, aber nur auf einem sehr kleinen Feld.
Es soll laut Konstruktor aber so dargestellt werden, dass die Buttons im buttonpanel links liegen (West) und das padDraw in der Mitte (Center). Dies ist jedoch nicht so.
Kann zufällig jemand sagen, welches Panel ich wo falsch angefügt habe oder was ich umstellen muss?
Ich wüsste nicht, was ich noch ändern sollte...
Mit allen anderen Änderungsvarianten war überhaupt kein Zeichnen möglich oder es wurde nichts mehr angezeigt.

Hier der Code des Konstruktors:

Java:
public MeinPaint() {
        //Das Hauptframe wird erstellt
        frame=new JFrame("Mein Paint Programm");
        frame.setSize(1000, 750);
        frame.setLocationRelativeTo(null);
        frame.setLayout(new BorderLayout());
      
        //Hierdrauf wird alles hinzugefügt
        Container c=frame.getContentPane();

        //Hierdrauf wird gezeichnet
        zeichnenPanel=new JPanel();
        zeichnenPanel.setSize(1000, 750);
        zeichnenPanel.setMinimumSize(new Dimension(75, 55));
        zeichnenPanel.setMaximumSize(new Dimension(85, 65));
        zeichnenPanel.setVisible(false);

        //Hier liegen die Buttons
        buttonPanel=new JPanel();
        buttonPanel.setLayout(new GridLayout(11, 1));
        buttonPanel.setSize(100, 750);

        //Hier wird das Auswahlpanel angelegt
        hauptpanel=new JPanel();
        hauptpanel.setVisible(true);
        hauptpanel.setLayout(new GridLayout(2, 1));

        //Das Anzeigepanel für die existierenden Zeichnungen wird erstellt
        nurAnzeigePanel=new JPanel();
        nurAnzeigePanel.setVisible(false);
              
        //zurück button
        JButton zurueck2=new JButton("zurück2");
        //Die zwei Hauptmenübuttons werden hinzugefügt
        JButton malen,zeichnungenAnzeigen;
        malen=new JButton("Malen");
        zeichnungenAnzeigen=new JButton("Zeichnungen anzeigen");
      
        //Erstellen der Drawklasse
        final Drawing draw=new Drawing();
        draw.setSize(880, 700);
      
        //Die Listener werden registriert
        malen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                hauptpanel.setVisible(false);
                zeichnenPanel.setVisible(true);
                nurAnzeigePanel.setVisible(false);
                repaint();
            }
        });
        //ebenso
        zeichnungenAnzeigen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                hauptpanel.setVisible(false);
                zeichnenPanel.setVisible(false);
                nurAnzeigePanel.setVisible(true);
                repaint();
            }
        });
      
        //der zurück Button wird eingefügt
        JButton zurueck=new JButton("zurück");
        zurueck.setPreferredSize(new Dimension(80, 60));
        zurueck.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                hauptpanel.setVisible(true);
                zeichnenPanel.setVisible(false);
                nurAnzeigePanel.setVisible(false);
                repaint();
            }
        });
      
        //Die Farbbuttons werden erstellt
        JButton blau=new JButton("blau");
        blau.setPreferredSize(new Dimension(80, 60));
        blau.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Blau();
            }
        });
  
        JButton gruen=new JButton("grün");
        gruen.setPreferredSize(new Dimension(80, 60));
        gruen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Gruen();
            }
        });
      
        JButton rot=new JButton("rot");
        rot.setPreferredSize(new Dimension(80, 60));
        rot.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Rot();
            }
        });
      
        JButton gelb=new JButton("gelb");
        gelb.setPreferredSize(new Dimension(80, 60));
        gelb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Gelb();
            }
        });
      
        JButton schwarz=new JButton("blk");
        schwarz.setPreferredSize(new Dimension(80, 60));
        schwarz.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Schwarz();
            }
        });
      
        JButton cyan=new JButton("cyan");
        cyan.setPreferredSize(new Dimension(80, 60));
        cyan.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Cyan();
            }
        });
      
        JButton magenta=new JButton("mg");
        magenta.setPreferredSize(new Dimension(80, 60));
        magenta.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Magenta();
            }
        });
      
        JButton pink=new JButton("pink");
        pink.setPreferredSize(new Dimension(80, 60));
        pink.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Pink();
            }
        });
      
        JButton grau=new JButton("grau");
        grau.setPreferredSize(new Dimension(80, 60));
        grau.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Grau();
            }
        });
      
        //der löschen button wird erstellt
        JButton loeschen=new JButton("C");
        loeschen.setPreferredSize(new Dimension(80, 60));
        loeschen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.clear();
            }
        });
      
        //alle Buttons werden der Zeichenfläche hinzugefügt
        buttonPanel.add(blau);
        buttonPanel.add(gruen);
        buttonPanel.add(rot);
        buttonPanel.add(gelb);
        buttonPanel.add(schwarz);
        buttonPanel.add(cyan);
        buttonPanel.add(magenta);
        buttonPanel.add(pink);
        buttonPanel.add(grau);
        buttonPanel.add(loeschen);
        buttonPanel.add(zurueck);
        buttonPanel.setBackground(Color.LIGHT_GRAY);
      
        //das anzeigepanel wird hinzugefügt
        c.add(nurAnzeigePanel);
        nurAnzeigePanel.setLayout(new BorderLayout());
      
        //das Bild worauf gemalt wird, wird hinzugefügt ebenso das buttonpanel
//        zeichnenPanel.add(draw,BorderLayout.CENTER);
        zeichnenPanel.add(buttonPanel,BorderLayout.WEST);
        buttonPanel.add(draw,BorderLayout.CENTER);
      
      
        //Die Buttons werden angelegt
        hauptpanel.add(malen);
        malen.setPreferredSize(new Dimension(80, 60));
        malen.setSize(80, 60);
        //Hier auch noch
        hauptpanel.add(zeichnungenAnzeigen);
        zeichnungenAnzeigen.setPreferredSize(new Dimension(80,60));
        zeichnungenAnzeigen.setSize(80, 60);
              
        //Das Panel wird dem Frame hinzugefügt
        c.add(zeichnenPanel);
      
        //Nur das Hauptpanel ist zuerst sichtbar
        c.add(hauptpanel);
        hauptpanel.setVisible(true);
      
        //Anzeigepanel wird bearbeitet
        nurAnzeigePanel.add(layout, BorderLayout.NORTH);
        nurAnzeigePanel.add(zeichen,BorderLayout.CENTER);
        layout.setLayout(new GridLayout(1, 5));
        layout.add(objektAuswahl,BorderLayout.NORTH);
        layout.add(annehmen,BorderLayout.NORTH);
        layout.add(fuellen, BorderLayout.NORTH);
        layout.add(zurueck2=new JButton("zurück"));
  
        zurueck2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                nurAnzeigePanel.setVisible(false);
                zeichnenPanel.setVisible(false);
                hauptpanel.setVisible(true);
                repaint();
            }
        });
      
        objektAuswahl.setSize(getWidth()/2,50);
        annehmen.setSize(getWidth()/2,50);
        annehmen.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                zeichen.setFuellstatus(fuellen.isSelected());
                zeichen.setAuswahl(objektAuswahl.getSelectedIndex());
                zeichen.repaint();  
            }
        });
      
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
 
Zuletzt bearbeitet von einem Moderator:

Meniskusschaden

Top Contributor
Du solltest mal versuchen, herauszufinden, warum die Code-Tags bei dir nicht funktionieren. So kann man das nicht gut lesen. Ich sehe den Fehler zwar auch nicht, aber zumindest über den Einfügen-Button sollte es gehen.

Leider ist der Code wieder nicht kompilierbar, deshalb habe ich es nicht getestet sondern nur oberflächlich angeschaut. Ich glaube, du mußt dich mal mit Layout-Managern und der Anordnung deiner Panels beschäftigen. Hier versuchst du beispielsweise zweimal die BorderLayout-Komponenten zu verwenden, obwohl keines der beiden Panels BorderLayout benutzt:
Java:
        // das Bild worauf gemalt wird, wird hinzugefügt ebenso das buttonpanel
        // zeichnenPanel.add(draw,BorderLayout.CENTER);
        zeichnenPanel.add(buttonPanel, BorderLayout.WEST);
        buttonPanel.add(draw, BorderLayout.CENTER);
 

Meniskusschaden

Top Contributor
Für die Fehlersuche und auch für die Diskussion hier wäre es wahrscheinlich einfacher, wenn du ein triviales Testbeispiel aufbauen würdest, das im Wesentlichen nur die für dein Layout benötigten Panels ohne jegliche Funktionalität enthält. Das Problem lässt sich bestimmt mit einem Bruchteil des Codes nachstellen.
 

Alex2013

Bekanntes Mitglied
@Meniskusschaden: Ich habe den Fehler endlich gefunden. Es lag daran, dass ich testweise zum einen das adden der Komponenten wieder zu falsch geändert hatte (aufgrund der Fehlersuche) und zum Anderen daran, dass ich einem falschen Panel das Borderlayout zugewiesen hatte... -.-
Jetzt funktioniert es soweit und ich werde den Konstruktor noch erweitern...
Danke für die Unterstützung! :)
 

Alex2013

Bekanntes Mitglied
So ist es richtig:
//Hierdrauf wird gezeichnet
zeichnenPanel=new JPanel();
zeichnenPanel.setLayout(new BorderLayout()); //Hier hatte ich: zeichnen.setLayout

//das Bild worauf gemalt wird, wird hinzugefügt ebenso das buttonpanel
zeichnenPanel.add(draw,BorderLayout.CENTER);
zeichnenPanel.add(buttonPanel,BorderLayout.WEST);
//Hier hatte ich zeitweise buttonpanel.add(draw); kann natürlich auch nicht klappen. aber zum testen //versucht man eben alles.
 

Alex2013

Bekanntes Mitglied
Jetzt wird mir zwar das eine Panel mit Paint angezeigt, aber das andere Panel, auf welchem ich die Zeichnungen nur anzeigen möchte nicht mehr. Der Code ist compilierbar.

Als ich vor einiger Zeit hier war, waren die Tags wie folgt: [Java][/Java]
Hat sich daran etwas geändert? Ich vermute mal ja. Wie werden sie denn jetzt richtig geschrieben?

@Meniskusschaden : hast du hier zufällig eine Idee? oder @Robat : weißt du hier etwas?
Alles was initialisiert werden muss, ist initialisiert und geadded.
Ich weiß hier grad echt nicht weiter.

Code:
Klasse1:
Java:
public class MeinPaint extends JFrame
{
    private static final long serialVersionUID = 1L;
    JFrame frame;
    JPanel hauptpanel,zeichnenPanel,nurAnzeigePanel,buttonPanel;
  
    JPanel zeichnen=new JPanel();
    JPanel layout=new JPanel();
    Zeichen zeichen;
  
    public MeinPaint() {
        //Das Hauptframe wird erstellt
        frame=new JFrame("Mein Paint Programm");
        frame.setSize(1000, 750);
        frame.setLocationRelativeTo(null);
        frame.setLayout(new BorderLayout());
      
        //Hierdrauf wird alles hinzugefügt
        Container c=frame.getContentPane();

        //Hierdrauf wird gezeichnet
        zeichnenPanel=new JPanel();
        zeichnenPanel.setLayout(new BorderLayout());
        zeichnenPanel.setSize(1000, 750);
        zeichnenPanel.setMinimumSize(new Dimension(75, 55));
        zeichnenPanel.setMaximumSize(new Dimension(85, 65));
        zeichnenPanel.setVisible(false);

        //Hier liegen die Buttons
        buttonPanel=new JPanel();
        buttonPanel.setLayout(new GridLayout(11, 2));
        buttonPanel.setSize(100, 750);

        //Hier wird das Auswahlpanel angelegt
        hauptpanel=new JPanel();
        hauptpanel.setVisible(true);
        hauptpanel.setLayout(new GridLayout(2, 1));

        //Das Anzeigepanel für die existierenden Zeichnungen wird erstellt
        nurAnzeigePanel=new JPanel();
        nurAnzeigePanel.setLayout(new BorderLayout());
        nurAnzeigePanel.setVisible(false);
      
        //Die zwei Hauptmenübuttons werden hinzugefügt
        JButton malen,zeichnungenAnzeigen;
        malen=new JButton("Malen");
        zeichnungenAnzeigen=new JButton("Zeichnungen anzeigen");
      
        //Erstellen der Drawklasse
        final Drawing draw=new Drawing();
        draw.setSize(880, 700);
      
        //Die Listener werden registriert
        malen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                hauptpanel.setVisible(false);
                zeichnenPanel.setVisible(true);
                nurAnzeigePanel.setVisible(false);
                repaint();
            }
        });
        //ebenso
        zeichnungenAnzeigen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                hauptpanel.setVisible(false);
                zeichnenPanel.setVisible(false);
                nurAnzeigePanel.setVisible(true);
                repaint();
            }
        });
      
        //der zurück Button wird eingefügt
        JButton zurueck=new JButton("zurück");
        zurueck.setPreferredSize(new Dimension(80, 60));
        zurueck.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                hauptpanel.setVisible(true);
                zeichnenPanel.setVisible(false);
                nurAnzeigePanel.setVisible(false);
                repaint();
            }
        });
      
        //zurück button
        JButton zurueck2=new JButton("zurück2");
        //Der Button ist für das zweite Fenster NurAnzeigen
        zurueck2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                nurAnzeigePanel.setVisible(false);
                zeichnenPanel.setVisible(false);
                hauptpanel.setVisible(true);
                repaint();
            }
        });
      
        //Die Farbbuttons werden erstellt
        JButton blau=new JButton("blau");
        blau.setPreferredSize(new Dimension(80, 60));
        blau.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Blau();
            }
        });
  
        JButton gruen=new JButton("grün");
        gruen.setPreferredSize(new Dimension(80, 60));
        gruen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Gruen();
            }
        });
      
        JButton rot=new JButton("rot");
        rot.setPreferredSize(new Dimension(80, 60));
        rot.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Rot();
            }
        });
      
        JButton gelb=new JButton("gelb");
        gelb.setPreferredSize(new Dimension(80, 60));
        gelb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Gelb();
            }
        });
      
        JButton schwarz=new JButton("blk");
        schwarz.setPreferredSize(new Dimension(80, 60));
        schwarz.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Schwarz();
            }
        });
      
        JButton cyan=new JButton("cyan");
        cyan.setPreferredSize(new Dimension(80, 60));
        cyan.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Cyan();
            }
        });
      
        JButton magenta=new JButton("mg");
        magenta.setPreferredSize(new Dimension(80, 60));
        magenta.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Magenta();
            }
        });
      
        JButton pink=new JButton("pink");
        pink.setPreferredSize(new Dimension(80, 60));
        pink.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Pink();
            }
        });
      
        JButton grau=new JButton("grau");
        grau.setPreferredSize(new Dimension(80, 60));
        grau.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.Grau();
            }
        });
      
        //der löschen button wird erstellt
        JButton loeschen=new JButton("C");
        loeschen.setPreferredSize(new Dimension(80, 60));
        loeschen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                draw.clear();
            }
        });
      
        //alle Buttons werden der Zeichenfläche hinzugefügt
        buttonPanel.add(blau);
        buttonPanel.add(gruen);
        buttonPanel.add(rot);
        buttonPanel.add(gelb);
        buttonPanel.add(schwarz);
        buttonPanel.add(cyan);
        buttonPanel.add(magenta);
        buttonPanel.add(pink);
        buttonPanel.add(grau);
        buttonPanel.add(loeschen);
        buttonPanel.add(zurueck);
        buttonPanel.setBackground(Color.LIGHT_GRAY);
      
      
      
      
      
        //Die Klasse Zeichen wird initialisiert
        zeichen=new Zeichen();
      
        //Die Inhalte von Zeichen werden deklariert und initialisiert
        String []objekte={"Rechteck","Oval","Arc","ROA zeichnen","Alle zeichnen","Punkt 1","Punkt 2","Linie","Acht"};
        @SuppressWarnings({ "rawtypes", "unchecked" })
        final JComboBox objektAuswahl=new JComboBox(objekte);
        objektAuswahl.setSize(getWidth()/4,50);
        final JRadioButton fuellen=new JRadioButton("füllen");

        //Zeichnungen anzeigen
        JButton annehmen=new JButton("annehmen");
        annehmen.setSize(getWidth()/4,50);
        annehmen.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                zeichen.setFuellstatus(fuellen.isSelected());
                zeichen.setAuswahl(objektAuswahl.getSelectedIndex());
                zeichen.repaint();  
            }
        });
      
      
        //das Bild worauf gemalt wird, wird hinzugefügt ebenso das buttonpanel
        zeichnenPanel.add(draw,BorderLayout.CENTER);
        zeichnenPanel.add(buttonPanel,BorderLayout.WEST);
      
        //Anzeigepanel wird bearbeitet
        layout.setSize(1000, 100);
        layout.setLayout(new GridLayout(4, 1));
        layout.add(objektAuswahl);
        layout.add(annehmen);
        layout.add(fuellen);
        layout.add(zurueck2);
        zeichnen.add(zeichen);
        nurAnzeigePanel.add(layout,BorderLayout.NORTH);
        nurAnzeigePanel.add(zeichnen,BorderLayout.CENTER);
                      
      
        //Die Buttons werden angelegt
        hauptpanel.add(malen);
        malen.setPreferredSize(new Dimension(80, 60));
        malen.setSize(80, 60);
        //Hier auch noch
        hauptpanel.add(zeichnungenAnzeigen);
        zeichnungenAnzeigen.setPreferredSize(new Dimension(80,60));
        zeichnungenAnzeigen.setSize(80, 60);
              
        //Das Panel wird dem Frame hinzugefügt
        c.add(zeichnenPanel);
        //Das Panel wird dem Frame hinzugefügt
        c.add(nurAnzeigePanel);
        //Nur das Hauptpanel ist zuerst sichtbar
        c.add(hauptpanel);
        hauptpanel.setVisible(true);
        //Das Hauptframe wird angezeigt
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args)
    {
        new MeinPaint();
    }
}

Klasse2:
Java:
public class Zeichen extends JPanel{
        private static final long serialVersionUID = 1L;
        int auswahl;
        boolean stat=false;
  
        public Zeichen()
        {
            auswahl=10;
            setVisible(true);
        }
      
        public void setFuellstatus(boolean f)
        {
            stat=f;
        }
      
        public void setAuswahl(int a)
        {
            auswahl=a;
        }
      
        @SuppressWarnings("unused")
        public void paint(Graphics g) {
            //TODO Auto-generated method stub
            g.setColor(Color.WHITE);
            g.fillRect(0, 0, getWidth(), getHeight());
            g.setColor(Color.BLACK);
            //x Linie
            g.drawLine(getWidth()-getWidth(), getHeight()/2, getWidth(), getHeight()/2);
            //y Linie
            g.drawLine(getWidth()/2, getHeight()-getHeight(), getWidth()/2, getHeight());
          
            switch(auswahl)
            {
                case 0:
                    if(stat)
                    {
                        g.fillRect(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3));//*2 50, 150, 150);
                    }
                    else
                        g.drawRect(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3));//(50, 50, 150, 150);
                        break;
                case 1:
                    if(stat)
                    {
                        g.fillOval(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3));//(50, 50, 150, 150);
                    }
                    else
                        g.drawOval(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3));//(50, 50, 150, 150);
                    break;
                case 2:
                    if(stat)
                    {
                        g.fillArc(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3), 100, 100);
                    }
                    else
                        g.drawArc(getWidth()/3,getHeight()/3,(getWidth()/3)*1,(getHeight()/3), 100, 100);
                    break;
                    //alle zusammen zeichnen
                case 3:
                    if(stat)
                    {
                        g.fillRect(50,50,100,100);
                        g.fillOval(50,350,100,100);
                        g.fillArc((getWidth()/3)*2,50, 100, 100, 250, 250);
                    }
                    else
                    {
                        g.drawRect(50,50,100,100);
                        g.drawOval(50,350,100,100);
                        g.drawArc((getWidth()/3)*2,50, 100, 100, 250, 250);
                    }
                    break;
                case 4:
                    if(stat)
                    {
                        g.fillRect(5, 5, 155, 205);
                        g.fillArc(100, 100, 250, 250, 20, 20);
                        g.fillOval(270, 270, 50, 50);
                        g.fill3DRect(350, 350, 150, 100, true);
                        g.fillPolygon(new Polygon());
                    }
                    else
                    {
                        g.drawRect(5,5, 155, 205);
                        g.drawArc(100, 100, 250, 250, 20, 20);
                        g.drawOval(270, 270, 50, 50);
                        g.draw3DRect(350, 350, 150, 100, true);
                        g.drawPolygon(new Polygon());
                    }
                    break;
                case 5:
                    g.drawString("o", getWidth()/2, getHeight()/2);
                    break;
                case 6:
                    g.drawString("o", getWidth()/3, getHeight()/3);
                    g.drawString("o", (getWidth()/3)*2,(getHeight()/3)-((getHeight()/3)/3));
                    break;
                case 7:
                    int x1=getWidth()/3;int y1=getHeight()/3;
                    int x2=(getWidth()/3)*2;int y2=(getHeight()/3)-((getHeight()/3)/3);
                    g.drawLine(x1,y1,x2,y2);
                    break;
                case 8:
                    if(stat)
                    {
                        g.fillOval(getWidth()-(getWidth()/4),getHeight()-(getHeight()/4),getWidth()/2,getHeight()/2);
                        g.fillOval(getWidth()-(getWidth()/4),getHeight()-(getHeight()/4),getWidth()/2,getHeight()/2);
                    }
                    else
                    {
                        g.drawOval(getWidth()-(getWidth()+(getWidth()/4)),getHeight()-((getHeight()/4)*3),getWidth()/2,getHeight()/2);
                        g.drawOval(getWidth()-((getWidth()/4)*3),getHeight()-((getHeight()/4)*3),getWidth()/2,getHeight()/2);
                    }
            }
        }
}

Vielen Dank schon mal für einen Tipp :)
 
Zuletzt bearbeitet von einem Moderator:

Meniskusschaden

Top Contributor
Hat sich daran etwas geändert? Ich vermute mal ja. Wie werden sie denn jetzt richtig geschrieben?
Ich benutze immer den Button "Einfügen..." und kümmere mich nicht weiter darum.
Jetzt wird mir zwar das eine Panel mit Paint angezeigt, aber das andere Panel, auf welchem ich die Zeichnungen nur anzeigen möchte nicht mehr.
Mir ist nicht wirklich klar, wie das Ergebnis aussehen soll. Nach dem Einfügen der beiden folgenden Zeilen an den passenden Stellen wird aber immerhin etwas angezeigt:
Java:
nurAnzeigePanel.setSize(1000, 750);
zeichnen.setLayout(new BorderLayout());
 

Alex2013

Bekanntes Mitglied
@Meniskusschaden : Das Ergebnis des zweiten Buttons bzw. das was auf dem anderen Panel zu sehen sein soll, ist das Folgende:

Mehr soll nur auf dem zweiten Panel nicht angezeigt werden. Leider wird hier aber gar nichts anzeigt, obwohl die Komponenten alle soweit ich das sehe, richtig angelegt wurden.
 

Anhänge

  • Ergebnis.jpg
    Ergebnis.jpg
    41 KB · Aufrufe: 24

Alex2013

Bekanntes Mitglied
Ja, bei mir passt es jetzt auch fast. Jetzt muss ich nur den Center Hintergrund hinbekommen, der ja eigtl. schon vorhanden sein sollte.
Komisch, dass mir das nicht aufgefallen ist... -.-
Aber danke für den Tipp :)
 

Alex2013

Bekanntes Mitglied
jetzt sieht es bei mir wie folgt aus:
Ich habe nur die Initialisierung wie bei der Klasse draw etwas angepasst und es unten ähnlich wie du es geschrieben hast gelassen.
Java:
final Zeichen zeichen=new Zeichen();
        zeichen.setSize(1000, 650);

Java:
nurAnzeigePanel.add(zeichnen,BorderLayout.CENTER);

        zeichnen.setBackground(Color.WHITE);

Wie man sieht, wird jetzt alles angezeigt, aber nur sehr klein. Die größe von Zeichen habe ich ja schon angepasst. Weißt du, was ich hier noch ändern müsste?
 

Anhänge

  • Ergebnis.jpg
    Ergebnis.jpg
    30,4 KB · Aufrufe: 30

Joose

Top Contributor
Als ich vor einiger Zeit hier war, waren die Tags wie folgt: [Java][/Java]
Hat sich daran etwas geändert? Ich vermute mal ja. Wie werden sie denn jetzt richtig geschrieben?

Vor einiger Zeit für auf eine andere Foren Software umgestellt, daher gibt es diese Java-Tags nicht mehr. Stattdessen gibt es die Code-Tags
[code=java] .. dein code .. [/code]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Bild zeichnen lassen aus array, null pointer Exception AWT, Swing, JavaFX & SWT 2
P paint null pointer exception AWT, Swing, JavaFX & SWT 3
A Null pointer exception beim Neuzeichnen AWT, Swing, JavaFX & SWT 4
V Null Pointer Exception bei JTextField setText AWT, Swing, JavaFX & SWT 25
G null pointer mit getText AWT, Swing, JavaFX & SWT 2
Z textField.getText = null AWT, Swing, JavaFX & SWT 15
Davee JavaFX ListView = null wenn ich sie in Laufzeit ändern will! AWT, Swing, JavaFX & SWT 16
AmsananKING Textfelder sind gleich null AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
J Injection - Aber Controller sind null AWT, Swing, JavaFX & SWT 3
J Controller ist null - Warum AWT, Swing, JavaFX & SWT 3
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
N SceneBuilder wie auf Attribute zugreifen? Diese sind immer null. AWT, Swing, JavaFX & SWT 6
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
D Zwischen Null-Layouts wechseln AWT, Swing, JavaFX & SWT 2
S Unverstandene Null.PointException AWT, Swing, JavaFX & SWT 4
D AWT Graphics2D getClip gibt null zurück AWT, Swing, JavaFX & SWT 3
H Swing jComboBox Ausgabe -1/null AWT, Swing, JavaFX & SWT 4
G Swing, JavaFx - Felder aus FXML sind null AWT, Swing, JavaFX & SWT 6
K Swing JSpinner mit NULL AWT, Swing, JavaFX & SWT 3
F JavaFX Properties und NULL Werte AWT, Swing, JavaFX & SWT 2
M JTextField gibt beim auslesen null aus AWT, Swing, JavaFX & SWT 9
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
S String is null Fehler AWT, Swing, JavaFX & SWT 2
R Swing JLabel gibt stets 'null' aus AWT, Swing, JavaFX & SWT 3
E Null-Layout - Wie geht es ohne? AWT, Swing, JavaFX & SWT 19
P Swing JTable null values an das Ende verschieben AWT, Swing, JavaFX & SWT 2
S pack() bei null-Layout AWT, Swing, JavaFX & SWT 10
F Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null AWT, Swing, JavaFX & SWT 5
C JTable sorter GregorianCalender null Exc AWT, Swing, JavaFX & SWT 4
N Swing JFrame==null und doch nicht null?! AWT, Swing, JavaFX & SWT 4
N JButton Border(null) AWT, Swing, JavaFX & SWT 3
E JPanel mit Null Layout entfernt Buttons AWT, Swing, JavaFX & SWT 11
K Swing regexFilter() null filtern AWT, Swing, JavaFX & SWT 3
R Swing JComboBox - Null-Feld AWT, Swing, JavaFX & SWT 7
M SWT DateTime per default null Wert ? AWT, Swing, JavaFX & SWT 3
J JScrollPane & Null-Layout AWT, Swing, JavaFX & SWT 12
A JPanel mit Layout(null) in JPanel AWT, Swing, JavaFX & SWT 4
G Zentrieren mittels setLocationRelativeTo(null);? AWT, Swing, JavaFX & SWT 14
G Value vom TreeCellEditor ist immer null AWT, Swing, JavaFX & SWT 3
G JTree Problem: Null Child not allowed AWT, Swing, JavaFX & SWT 12
J JList CellRenderer Null-Layoutpanel AWT, Swing, JavaFX & SWT 4
C getGraphics() liefert nur null AWT, Swing, JavaFX & SWT 4
H null Layout -> Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
G Probleme mit Content bei Null-Layout verändern AWT, Swing, JavaFX & SWT 7
T Null Layout Problem. AWT, Swing, JavaFX & SWT 3
M JFormattedTextField und Null-Werte AWT, Swing, JavaFX & SWT 4
S Text im JLabel wird nicht als null anerkannt AWT, Swing, JavaFX & SWT 4
I Null-Layout-Problem AWT, Swing, JavaFX & SWT 2
M Problem mit NULL-Layout AWT, Swing, JavaFX & SWT 2
V CellEditor der nur Eingaben int 1-9 und "null" er AWT, Swing, JavaFX & SWT 11
H getGraphics() eines JPanel liefert immer null zurück AWT, Swing, JavaFX & SWT 6
F PanelBounds an TextPaneBounds anpassen LayoutManager: Null AWT, Swing, JavaFX & SWT 2
O JScrollPane beinhaltet JPanel mit null Layout kein Scrollen AWT, Swing, JavaFX & SWT 3
M bei filechooser.showSaveDialog(null); auf Datein. zugreifen AWT, Swing, JavaFX & SWT 2
B NULL Layout - TextFelder verschwinden AWT, Swing, JavaFX & SWT 8
F Scrollen bei JTextArea in einem Null-Layout? Unmöglich? AWT, Swing, JavaFX & SWT 4
R Komponenten frei per Drag&Drop in (z.B.) Null-Layout bew AWT, Swing, JavaFX & SWT 2
B [Swing] Null-Layout AWT, Swing, JavaFX & SWT 2
G Scrollpane in null-Layout einfügen AWT, Swing, JavaFX & SWT 5
G JList: Anzeige von null-Werten verhindern AWT, Swing, JavaFX & SWT 3
W Probleme mit Border- und null-Layout AWT, Swing, JavaFX & SWT 8
Z createImage() liefert null zurück AWT, Swing, JavaFX & SWT 4
K JTextArea und setLayout(null) AWT, Swing, JavaFX & SWT 3
H Exception: java.lang.ClassCastException AWT, Swing, JavaFX & SWT 2
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
Z JavaFX Exception in Application start method AWT, Swing, JavaFX & SWT 2
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
R AWT no such child Exception AWT, Swing, JavaFX & SWT 7
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
A Swing Exception in thread "AWT-EventQueue-0" AWT, Swing, JavaFX & SWT 1
W JavaFX Warum kriege ich eine Exception? AWT, Swing, JavaFX & SWT 23
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Exception Message von Model Class via Controller in View darstellen AWT, Swing, JavaFX & SWT 39
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
S java.fxml.load.exception und keine automatische Aktualliseriung der Mainausgabe AWT, Swing, JavaFX & SWT 5
VfL_Freak AWT Exception in der Eventqueue AWT, Swing, JavaFX & SWT 8
X Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 AWT, Swing, JavaFX & SWT 6
H JavaFX Ein View vorschalten Exception AWT, Swing, JavaFX & SWT 7
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
M 3D-Grafik Mac Java 3D in Eclipse Exception AWT, Swing, JavaFX & SWT 0
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
I Opencv Imgproc.floodfill exception AWT, Swing, JavaFX & SWT 1
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
T Gui Exception AWT, Swing, JavaFX & SWT 2
X Auf Fensterklasse zugreifen (Nullpointer Exception) AWT, Swing, JavaFX & SWT 2
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
J Einträge aus Table löschen ohne Exception AWT, Swing, JavaFX & SWT 6
C Event Handling Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException AWT, Swing, JavaFX & SWT 43
V Swing Nullpointer Exception bei JFormattedTextField AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben