getGraphics ist böse! :noe:jPat hat gesagt.:In deiner FensterClass:
ich glaub mit Graphics g = this.getGraphics() oder so sollte es gehen.
private NaivePaintingComponent paintingComponent = new NaivePaintingComponent();
private JTextPane getJTextPaneAuswahl1HSB() {
if (jTextPaneAuswahl1HSB == null) {
jTextPaneAuswahl1HSB = new JTextPane();
jTextPaneAuswahl1HSB.setBackground(Color.red);
jTextPaneAuswahl1HSB.setBounds(new Rectangle(25, 25, 150, 150));
jTextPaneAuswahl1HSB.setEditable(false);
paintingComponent.setPreferredSize(new Dimension(150,150));
jTextPaneAuswahl1HSB.add(paintingComponent);
jTextPaneAuswahl1HSB.addMouseListener(new java.awt.event.MouseListener() {
public void mouseClicked(java.awt.event.MouseEvent e) {
try{
System.out.println("test");
double mouse_pos_x=e.getX();
double mouse_pos_y=e.getY();
paintingComponent.setColor(Color.BLACK);
Ellipse2D shapes = new Ellipse2D.Double(double mouse_pos_x,double mouse_pos_y,5d,5d);
paintingComponent.setShape(shapes);
paintingComponent.repaint();
}catch(Exception ex){
System.out.println(ex);
}
}
public void mousePressed(java.awt.event.MouseEvent e) {
}
public void mouseReleased(java.awt.event.MouseEvent e) {
}
public void mouseEntered(java.awt.event.MouseEvent e) {
}
public void mouseExited(java.awt.event.MouseEvent e) {
}
});
}
return jTextPaneAuswahl1HSB;
}
class NaivePaintingComponent extends JComponent {
private Shape shape;
private Color c;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(shape!=null && c!=null){
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(c);
g2d.draw(shape);
}
}
public void setColor(Color c) {
this.c = c;
}
public void setShape(Shape shape) {
this.shape = shape;
}
}
private JButton getTestButton() {
if (testButton == null) {
testButton = new JButton("Test");
testButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
paintingComponent.markSomethingElseToPaint();
paintingComponent.repaint();
});
)
return testButton ;
}
public class DlgFarben extends JDialog {
public DlgFarben(Frame owner) {
super(owner);
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(500, 400);
this.setTitle("Farbauswahl");
this.setContentPane(getJContentPane());
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
getFarbe();
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new CardLayout());
jContentPane.add(getJTextPaneAuswahl1HSB(), null);
}
return jContentPane;
}
private NaivePaintingComponent paintingComponent = new NaivePaintingComponent();
private JTextPane getJTextPaneAuswahl1HSB() {
if (jTextPaneAuswahl1HSB == null) {
jTextPaneAuswahl1HSB = new JTextPane();
paintingComponent.setPreferredSize(new Dimension(150,150));
jTextPaneAuswahl1HSB.add(paintingComponent);
jTextPaneAuswahl1HSB.addMouseListener(new java.awt.event.MouseListener() {
public void mouseClicked(java.awt.event.MouseEvent e) {
try{
System.out.println("test");
double mouse_pos_x=e.getX();
double mouse_pos_y=e.getY();
int mouse_pos_x_round=Integer.parseInt(""+Math.round(mouse_pos_x));
int mouse_pos_y_round=Integer.parseInt(""+Math.round(mouse_pos_y));
paintingComponent.setColor(Color.BLACK);
paintingComponent.setCoord(mouse_pos_x_round, mouse_pos_y_round, 5, 5);
paintingComponent.repaint();
}catch(Exception ex){
System.out.println(ex);
}
}
});
}
return jTextPaneAuswahl1HSB;
}
}
class NaivePaintingComponent extends JComponent {
private Shape shape;
int x=0, y=0, width=0, height=0;
private Color c;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(c);
System.out.println("1:"+x+" "+y+" "+width+" "+height);
g2d.drawOval(x, y, width, height);
}
public void setColor(Color c) {
this.c = c;
}
public void setCoord(int x, int y, int width, int height) {
this.x=x;
this.y=y;
this.width=width;
this.height=height;
}
}
class NaivePaintingComponent extends JComponent {
private Shape shape;
int x=0, y=0, width=0, height=0;
private Color c;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(c);
System.out.println("1:"+x+" "+y+" "+width+" "+height);
g2d.drawOval(x, y, width, height);
}
public void setColor(Color c) {
this.c = c;
}
public void setCoord(int x, int y, int width, int height) {
this.x=x;
this.y=y;
this.width=width;
this.height=height;
}
}
paintingComponent.setColor(Color.BLACK);
paintingComponent.setCoord(mouse_pos_x_round, mouse_pos_y_round, 5, 5);
paintingComponent.repaint();
LordTerra hat gesagt.:meine fresse sorry aber was is so schwer an dem code???
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PaintInSwing
{
//unsere frisch gebackene Komponente
private NaivePaintingComponent paintingComponent = new NaivePaintingComponent();
/**
* Im Konstrukor wird die übliche Arbeit erledigt um den JFrame zu öffnen
* und die Komponenten zu initialisieren
*/
public PaintInSwing() {
//einen JFrame erzeugen
JFrame frame = new JFrame("Selbst Zeichnen mit Swing");
//ein hübsches Layout setzen
frame.setLayout(new BorderLayout());
//dafür sorgen das das Programm beendet wird wenn man das 'X' anklickt
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//eine JComponent hat keine Ahnung davon was man auf ihr zeichnen möchte.
//Der LayoutManager hat also keine Möglichkeit die passende Größe für unser
//Objekt festzustellen und würde von (0,0) ausgehen.
//Daher helfen wir etwas nach und setzen die gewünschte Größe händisch
paintingComponent.setPreferredSize(new Dimension(300,300));
//unsere Komponente wird mittig im JFrame plaziert
frame.add(paintingComponent,BorderLayout.CENTER);
//in den unteren Bereich des Frames packen wir einige
//Steuerelemente die wir der Übersicht wegen in einer
//eigenen Methode erstellen und initialisieren
frame.add(createControls(),BorderLayout.SOUTH);
//der Frame enthält nun alle benötigten Komponenten
//und kann nun seine minimale Größe berechnen
frame.pack();
//und noch den Frame sichtbar machen und zentrieren
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
/**
* hier wird ein JPanel erzeugt auf das wir alle
* Steuerelemente legen
* @return ein JPanel das alle Steuerelemente enthält
*/
private Component createControls() {
//ein einfaches FlowLayout soll für unser Beispiel genügen
JPanel panel = new JPanel(new FlowLayout());
//Ein Array mit den 3 Grundfarben wird erstellt und in
//eine Combobox übergeben.
//damit können wir später die Farbe der Zeichnung bestimmen
Object[] colors = {Color.RED,Color.BLUE,Color.GREEN};
final JComboBox colorBox = new JComboBox(colors);
panel.add(colorBox);
//Als nächstes ein Array mit Shapes (Figuren).
//Der Einfachheit halber setzen wir die Position und Größe
//für alle Objekte fest.
//Die toString Methode wird hier überschrieben damit die Auswahl
//in der Combobox besser lesbar ist.
Object[] shapes = {
new Ellipse2D.Float(10f,10f,100f,100f) {public String toString() {return "Ellipse";}},
new RoundRectangle2D.Float(10f,10f,100f,100f,20f,20f) {public String toString() {return "Abgerundetes Rechteck";}},
new Rectangle2D.Float(10f,10f,100f,100f) {public String toString() {return "Rechteck";}}
};
//Mit der ComboBox können wir bestimmen welche Figur gezeichnet werden soll
final JComboBox shapeBox = new JComboBox(shapes);
panel.add(shapeBox);
//als letztes noch ein Button mit dem die gewählte Figur gezeichnet wird
JButton paintNow = new JButton("Zeichnen");
panel.add(paintNow);
paintNow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//wir teilen unserer Zeichenkomponente die gewählte Farbe mit
paintingComponent.setColor((Color)colorBox.getSelectedItem());
//wir teilen unserer Zeichenkomponente mit welche Figur wir haben möchten
paintingComponent.setShape((Shape)shapeBox.getSelectedItem());
//jetzt soll gezeichnet werden
paintingComponent.repaint();
}
});
return panel;
}
public static void main(String[] args)
{
new PaintInSwing();
}
}
class NaivePaintingComponent extends JComponent
{
private Shape shape;
private Color c;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(shape!=null && c!=null)
{
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(c);
g2d.draw(shape);
}
}
public void setColor(Color c) {
this.c = c;
}
public void setShape(Shape shape) {
this.shape = shape;
}
}
private NaivePaintingComponent paintingComponent = new NaivePaintingComponent();
paintingComponent.setColor(Color.BLACK);
paintingComponent.setCoord(mouse_pos_x_round, mouse_pos_y_round, 5, 5);
paintingComponent.repaint();
Nachdem was Du oben beschreibst, und was Du gebastelt hast, scheinen Dir einige Basics zu fehlen.
siehe hier:LordTerra hat gesagt.:ich weis stelle grundsätzlich in beiden foren die fragen... will ja ne fixe antwort
echtma ...btw: echt ne frechheit, dass sich dinge in 5 jahren verändern ...
LordTerra hat gesagt.:und hey mein fehler lag darin das ich nen falsches panel benutzt hab juhu ich anfänger ich ... tzzz seltsam nur das es 15 antworten gedauert hat nur so nebenbei das ich dieses pannel benutzt hab stand in dem 1. post...