2D-Grafik Alles auf einen Panel Zeichnen

Anil

Mitglied
Hallo Leute
ich versuche zur Zeit so etwas wie ein Paint Programm zu programmieren habe jedoch paar Probleme. Hier zuerst mal der Queltext für die grafische Oberfläche:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 11/18/2010
  * @author
  */

public class GUIneu extends JFrame {
  // Anfang Attribute
  private JPanel JPanel1 = new JPanel(null);
    private JButton JButton1 = new JButton();
    private JButton JButton2 = new JButton();
    private JButton JButton3 = new JButton();
    private JButton JButton4 = new JButton();
    private JButton JButton5 = new JButton();
    private JButton JButton6 = new JButton();
    private JButton JButton7 = new JButton();
    private JButton JButton8 = new JButton();
    private ButtonGroup jButtonGroup1 = new ButtonGroup();
  // Ende Attribute

  public GUIneu(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 1000;
    int frameHeight = 700;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);


    // Anfang Komponenten

    JPanel1.setBounds(0, 0, 1000, 700);
    JPanel1.setBackground(null);
    cp.add(JPanel1);


    JButton1.setBounds(0, 0, 50, 50);

    JButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Bleistift.JPG")));
    JButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        JButton1_ActionPerformed(evt);
      }
    });
    JPanel1.add(JButton1);
    JButton2.setBounds(0, 50, 50, 50);
    JButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Rechteck.JPG")));
    JButton2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        JButton2_ActionPerformed(evt);
      }
    });
    JPanel1.add(JButton2);
    JButton3.setBounds(0, 100, 50, 50);
    JButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Kreis.JPG")));
    JButton3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        JButton3_ActionPerformed(evt);
      }
    });
    JPanel1.add(JButton3);
    JButton4.setBounds(0, 150, 50, 50);
    JButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Linie.JPG")));
    JButton4.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        JButton4_ActionPerformed(evt);
      }
    });
    JPanel1.add(JButton4);
    JButton5.setBounds(0, 200, 50, 50);
    JButton5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Ratzifummi.JPG")));
    JButton5.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        JButton5_ActionPerformed(evt);
      }
    });
    JPanel1.add(JButton5);
    JButton6.setBounds(0, 250, 50, 50);
    JButton6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Text.JPG")));
    JButton6.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        JButton6_ActionPerformed(evt);
      }
    });
    JPanel1.add(JButton6);
    JButton7.setBounds(0, 300, 50, 50);
    JButton7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Lupe.JPG")));
    JButton7.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        JButton7_ActionPerformed(evt);
      }
    });
    JPanel1.add(JButton7);
    JButton8.setBounds(0,350, 50, 50);
    JButton8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Farbpalette.JPG")));
    JButton8.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        JButton8_ActionPerformed(evt);
      }
    });
    JPanel1.add(JButton8);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);

  }


  // Anfang Methoden
  public void JButton1_ActionPerformed(ActionEvent evt) {
      Freihandzeichnen Fenster = new Freihandzeichnen();
      Fenster.setBounds(50, 0, 1000, 700);
      JPanel1.add(Fenster);

  }


  public void JButton2_ActionPerformed(ActionEvent evt) {
     Rechtecknew win = new Rechtecknew();
     win.setBounds(50, 0, 1000, 700);
     JPanel1.add(win);
  }

  public void JButton3_ActionPerformed(ActionEvent evt) {
     Kreis kreis = new Kreis();
     kreis.setBounds(50, 0, 1000, 700);
     JPanel1.add(kreis);
  }

  public void JButton4_ActionPerformed(ActionEvent evt) {
    Linie linie = new Linie();
    linie.setBounds(50, 0, 1000, 700);
    JPanel1.add(linie);
  }

  public void JButton5_ActionPerformed(ActionEvent evt) {
      Radiergummi Radier = new Radiergummi();
      Radier.setBounds(50, 0, 1000, 700);
      JPanel1.add(Radier);
  }

  public void JButton6_ActionPerformed(ActionEvent evt) {

  }

  public void JButton7_ActionPerformed(ActionEvent evt) {
      Zoom zoom = new Zoom();
      zoom.setBounds(50, 0, 1000, 700);
      JPanel1.add(zoom);
  }

  public void JButton8_ActionPerformed(ActionEvent evt) {
    Component comp = (Component) evt.getSource();

        Color newColor = JColorChooser.showDialog(
          null, "Wähle neue Farbe", comp.getBackground() );

        JPanel1.setBackground( newColor );
  }




  // Ende Methoden

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


Und dann noch die Quelltexte zum Zeichnen von Kreisen und von Rechtecken:

Rechteck:
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Rechtecknew extends JPanel implements MouseListener, MouseMotionListener  {


  // Anfang Attribute
    private Graphics2D g2;
    private Rectangle paintRect = new Rectangle();

  // Ende Attribute


    public Rechtecknew() {
        System.out.println("Rechteck..");
        this.addMouseListener(this);
        this.addMouseMotionListener(this);

    }
    protected void paintComponent(Graphics g) {


        if (paintRect != null) {
        g2 = (Graphics2D) g;
        g2.setPaintMode();
        g.drawRect(paintRect.x, paintRect.y, paintRect.width, paintRect.height);
        paintRect.x = paintRect.width ;
        paintRect.y = paintRect.height;
        }


    }

  // Anfang Methoden


    public void mouseClicked(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }


      public void mousePressed(MouseEvent e) {
        paintRect.x=e.getX();
        paintRect.y=e.getY();



      }

      public void mouseReleased(MouseEvent e) {
         paintRect.width = e.getX()-paintRect.x;
       paintRect.height = e.getY()-paintRect.y;
       repaint();

      }



      public void mouseDragged(MouseEvent e) {

      }


    public void mouseMoved(MouseEvent e) {

    }

  // Ende Methoden
}
Kreis:
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Kreis extends JPanel implements MouseListener, MouseMotionListener {

    private int startX, startY, tempX, tempY;

    private Graphics2D g2;

    public Kreis() {
        System.out.println("Kreis..");
        this.addMouseListener(this);
        this.addMouseMotionListener(this);
    }

    protected void paintComponent(Graphics g) {

         if (g != null) {
            g = (Graphics2D) g;
            g.drawArc(startX, startY, tempX, tempY,360 , 360);
        }
    }



    public void mouseClicked(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        startX = e.getX();
        startY = e.getY();
    }

    public void mouseReleased(MouseEvent e) {
       tempX = e.getX()-startX;
       tempY = e.getY()-startY;
       repaint();
    }

    public void mouseDragged(MouseEvent e) {


    }

    public void mouseMoved(MouseEvent e) {
    }
}

So :) jetzt habe ich das Problem dass ich auf einen Panel nicht beides zeichnen kann sondern nur dass welchen Button ich zuerst gedrückt habe. Wenn ich zum Beispiel auf den Rechteck Button drücke dann kann ich hinterher kein Kreis mehr zeichnen. Wie muss ich meinen Quelltext ändern damit das funktioniert??? Wäre wirklich edel wenn mir jemand helfen könnte :)
 
Zuletzt bearbeitet von einem Moderator:

BigBiber89

Mitglied
Wenn ich das richtig sehe zeichnest du nicht direkt auf dem Fenster sondern erzeugt jedes mal ein neues Panel mit jeweils einen Kreis bzw. einen Rechteck du müsste auch erstmal die Komponenten entfernen versuche mal getContentPane().removeAll() auf das Hauptfenster bei den beiden ActionListenern das du erst alle Komponenten entfernst.
Ein Kreis und ein Rechteck können bei deiner Implementierung eh nie gleichzeitig existieren.
 

Anil

Mitglied
Hmm danke erst mal für deine Antwort :) hättest du mir denn einen Vorschlag wie ich alles auf einen Panel zeichnen könnte? Genau so wie z.B. beim Paint Porgramm?
 

BigBiber89

Mitglied
Ja also man könnte es so machen du hast eine abstracte Oberklasse wie zum Beispiel: DrawableObject von denen du alle Klassen ableitest das sieht dann ungefähr so aus:

Java:
public abstract class DrawableObject{

         public abstract void paint(Graphics g);

}

Dann leitest du dann zum Beispiel ein Kreis ab:

Java:
public class Kreis extends DrawableObject{

private Point mitte;
private int radius;

public Kreis(Point mitte, int radius){
      this.mitte = mitte;
      this.radius = radius;
}

public void paint(Graphics g){
 // hier nun zeichnen
}
}

und in deinen Hauptframe sieht es dann so aus:

Java:
List<DrawableObject> drawables = new LinkedList<DrawableObject>();

// in der paintComponent nun so:

protected void paintComponent(Graphics g){

super.paintComponent(g);

for(DrawableObject d : drawables){
d.paint(g);
}

Das wäre de ungefähre aufbau bei weiteren Fragen immer stellen und ich würde statt Buttons ToggleButtons nehmen ;)
 

Anil

Mitglied
ich galube ich bin einfach zu schlecht fürs programmieren :S irgendwie funktioniert das nicht könntest du mir villeicht deine iddee mit meinem quelltext zeigen was ich wo reinbauen muss???
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Madlip SWT Tree mit einen Klick alles ausklappen AWT, Swing, JavaFX & SWT 3
N JFrame löscht alles, wenn groß gemacht AWT, Swing, JavaFX & SWT 9
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
N Java Mouse Listiner macht alles zusammen AWT, Swing, JavaFX & SWT 4
S Swing Alles beenden bei Fenster mit Scroll-Balken AWT, Swing, JavaFX & SWT 6
H Timer ohne alles lahmzulegen? AWT, Swing, JavaFX & SWT 2
R JPanel überzeichnet alles? AWT, Swing, JavaFX & SWT 1
N GUI zeigt alles klein an. AWT, Swing, JavaFX & SWT 7
llabusch JavaFX Dynamisch alles vergrößern (wie im Browser) AWT, Swing, JavaFX & SWT 3
E Alles in einem Fenster AWT, Swing, JavaFX & SWT 5
J Gibt es brauchbare GUI-Builder, oder doch besser alles per Hand machen? AWT, Swing, JavaFX & SWT 6
F java.awt.Font - ist das wirklich alles? AWT, Swing, JavaFX & SWT 3
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
Kenan89 removeAll, um alles in einem JPanel zu löschen AWT, Swing, JavaFX & SWT 10
M TableLayout: JComboBox zerstört alles... AWT, Swing, JavaFX & SWT 10
B SWT Alles über SWT AWT, Swing, JavaFX & SWT 4
E Alles unsichtbar machen AWT, Swing, JavaFX & SWT 12
S Sobald ich TextArea mit Text fülle alles weg? AWT, Swing, JavaFX & SWT 5
0din Jpanel will nich alles zeichnen AWT, Swing, JavaFX & SWT 15
G JTabbedPane zentiert alles AWT, Swing, JavaFX & SWT 3
A Icon,zentriert,Farbiger Text alles in einer Tabelle/Spalte ? AWT, Swing, JavaFX & SWT 4
B Arbeiten mit Prozessbar und alles drum herum AWT, Swing, JavaFX & SWT 3
hdi super.paintComponent(g); soll nicht alles löschen AWT, Swing, JavaFX & SWT 2
J JEditorPane zeigt nicht alles AWT, Swing, JavaFX & SWT 2
F Auf Thread warten ohne alles andere zu blockieren AWT, Swing, JavaFX & SWT 5
G JFrame : Nach dem maximieren, ist alles "verschwunden&q AWT, Swing, JavaFX & SWT 2
N LookAndFeel - Nicht gleich alles überschreiben AWT, Swing, JavaFX & SWT 8
MiMa Reaktion auf einen SplitScreenTrenner? AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
O Soll ich einen JEditorPane verwenden ? AWT, Swing, JavaFX & SWT 5
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
P Wie lese ich einen jRadioButton aus? AWT, Swing, JavaFX & SWT 21
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
H JavaFX via .fxml einen abgeleiteten Button erstellen... AWT, Swing, JavaFX & SWT 4
S Swing GANZE Row auf einen Schlag einfärben AWT, Swing, JavaFX & SWT 2
B JavaFX Wie programmiere ich hier einen "Weiter" Button? AWT, Swing, JavaFX & SWT 11
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
L Wie realisiere ich einen Controller AWT, Swing, JavaFX & SWT 1
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
F JavaFX Erstelle einen Wald AWT, Swing, JavaFX & SWT 6
Thallius Swing Aufgabe für einen der gerne Tüftelt. AWT, Swing, JavaFX & SWT 4
M JavaFX Wie füge ich zu einer WebEngine einen Flash Player hinzu AWT, Swing, JavaFX & SWT 3
G AWT Wie bekomme ich einen zeitgesteuerten robot hin? AWT, Swing, JavaFX & SWT 6
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
M Swing Mit Java in der GUI einen Belegungsplan einfügen AWT, Swing, JavaFX & SWT 23
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
H Swing Hintergrundbild in einen JFrame einfügen AWT, Swing, JavaFX & SWT 7
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
A Swing JTextField durch einen JButton leeren AWT, Swing, JavaFX & SWT 15
J Swing JTable-Event für einen Select?? AWT, Swing, JavaFX & SWT 3
P Swing RadioButtons - nur einen auswählen AWT, Swing, JavaFX & SWT 3
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
J JFrame in einen JFrame anzeigen AWT, Swing, JavaFX & SWT 2
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
T Einen Kreis anzeigen AWT, Swing, JavaFX & SWT 14
M SWT /Jface Wann einen ColumnLabelProvider benutzen? AWT, Swing, JavaFX & SWT 2
-horn- WorldWindJava+JOGL soll einen animierten Graphen anzeigen, wie? AWT, Swing, JavaFX & SWT 4
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Neue Farbe für einen Teilbereich einer Linie? AWT, Swing, JavaFX & SWT 8
M 3D-Grafik verschiedene Texturen auf einen Würfel mappen AWT, Swing, JavaFX & SWT 15
VfL_Freak Swing kann ich einen laufenden Timer mitten in der Ausführung abbrechen? AWT, Swing, JavaFX & SWT 6
P Swing JTabbedPane mit JButton einen anderen Tab anzeigen AWT, Swing, JavaFX & SWT 9
G Mit Java einen Button wie z.B. im Opera 10.63 erzeugen AWT, Swing, JavaFX & SWT 3
F Swing Beenden eines ActionListener über einen Button AWT, Swing, JavaFX & SWT 8
M Jframe wie bekommt man bei den zeile einen header erzeugen AWT, Swing, JavaFX & SWT 2
I Swing Wie bekomme ich den Fokus für einen JPanel AWT, Swing, JavaFX & SWT 5
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
K LookAndFeel LookAndFeel nur für einen Frame? AWT, Swing, JavaFX & SWT 6
J Swing Kalender soll auf Buttondruck einen Monat weiterblättern AWT, Swing, JavaFX & SWT 7
C Ermitteln ob JComponent einen Listener besitzt AWT, Swing, JavaFX & SWT 2
B LookAndFeel für einen Komponenten AWT, Swing, JavaFX & SWT 2
T Ordner öffnen nach Klick auf einen Button AWT, Swing, JavaFX & SWT 3
C AWT Oval nur für einen bestimmten Schritt zeichnen AWT, Swing, JavaFX & SWT 5
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
T Swing Wie kann ich einen String in ein TreePath umwandeln? AWT, Swing, JavaFX & SWT 5
B Restart-Funktion für einen Updatemechanismus?????? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben