Liebe Forumsgemeinde,
ich packe diese zwei Fragen mal in einen Thread, da sie zusammengehören.
Ich habe ein imageicon auf einem JLabel auf einem JFrame. Auf dem imageicon möchte ich gerne ein Path2D-Polygon mit der fill-Methode füllen.
Problem 1:
Mit dem folgenden Code wird das Polygon mal vor dem icon, aber meistens hinter dem icon gefüllt und dargestellt und ist daher nicht zu sehen. Wie erreiche ich, dass immer erst das icon vollständig geladen und erst danach das Polygon gefüllt wird und "auf" dem icon zu sehen ist?
Wird dabei eigentlich auf dem JFrame oder auf dem JLabel gezeichnet? Oder einfach auf der obersten Ebene? Ich tu mich bei der Graphics-Klasse noch sehr schwer.
Problem 2:
In allen Beispielen, die ich gefunden habe, wird alles, was graphics benötigt, in den Code unter "public void paint(Graphics g)" geschrieben. Wie mache ich das denn, wenn ich erst im Laufe der Prozedur ein Polygon erzeuge und es dann füllen lassen möchte, zum Beispiel bei einem Mausklick? Der folgende Code funktioniert nicht, was muss ich unten ändern?
Vielen Dank für die Mühe!
ich packe diese zwei Fragen mal in einen Thread, da sie zusammengehören.
Ich habe ein imageicon auf einem JLabel auf einem JFrame. Auf dem imageicon möchte ich gerne ein Path2D-Polygon mit der fill-Methode füllen.
Problem 1:
Mit dem folgenden Code wird das Polygon mal vor dem icon, aber meistens hinter dem icon gefüllt und dargestellt und ist daher nicht zu sehen. Wie erreiche ich, dass immer erst das icon vollständig geladen und erst danach das Polygon gefüllt wird und "auf" dem icon zu sehen ist?
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Path2D;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
public class PfadAufBild extends JFrame{
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D)g;
Path2D path1 = new Path2D.Float();
path1.moveTo(100, 100);
path1.lineTo(200, 100);
path1.lineTo(200, 200);
path1.lineTo(100, 200);
path1.closePath();
g2.setPaint(Color.red);
g2.fill(path1);
}
public static void main(String args[])
{
PfadAufBild beispiel = new PfadAufBild();
beispiel.setSize(400,400);
beispiel.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
beispiel.setVisible(true);
JLabel label1=new JLabel();
beispiel.add(label1);
label1.setSize(400, 400);
label1.setIcon(new javax.swing.ImageIcon("C:\\Bild.jpg"));
}
}
Wird dabei eigentlich auf dem JFrame oder auf dem JLabel gezeichnet? Oder einfach auf der obersten Ebene? Ich tu mich bei der Graphics-Klasse noch sehr schwer.
Problem 2:
In allen Beispielen, die ich gefunden habe, wird alles, was graphics benötigt, in den Code unter "public void paint(Graphics g)" geschrieben. Wie mache ich das denn, wenn ich erst im Laufe der Prozedur ein Polygon erzeuge und es dann füllen lassen möchte, zum Beispiel bei einem Mausklick? Der folgende Code funktioniert nicht, was muss ich unten ändern?
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Path2D;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class Mausaufruf extends JFrame{
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.red);
}
public static void main(String args[])
{
Mausaufruf beispiel = new Mausaufruf();
beispiel.setSize(400,400);
beispiel.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
beispiel.setVisible(true);
beispiel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
Path2D path1 = new Path2D.Float();
path1.moveTo(100, 100);
path1.lineTo(200, 100);
path1.lineTo(200, 200);
path1.lineTo(100, 200);
path1.closePath();
g2.fill(path1);
}});
}
}
Vielen Dank für die Mühe!