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:
@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?
 
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.
 
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?
 
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:
-.-
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... 🙂
 
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:
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);
 
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.
 
@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! 🙂
 
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.
 
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:
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());
 
@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
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 🙂
 
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
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]
 

Zurück
Oben