Hallo , ich würde gerne einen Viertel-Bogen zwischen zwei frei auswählbaren Punkten(JLabels) zeichnen können , der sich später als Tür von Grundrissen darstellen lässt.
Dazu verwende ich die fillArc(...) Methode der Graphics2D Java-Klasse.
Mir sind alle Parameter bekannt, auch, dass der "Kreis" innerhalb eines Rechtecks gezeichnet wird.
Trotz rumspielerei mit den Parametern zur Positionierung komme ich nicht auf das von mir gewünschte Ergebnis.
Eine alternative wäre Icons zwischen den zwei JLabels zu platzieren, doch über dessen Implementation bin ich mir sehr skeptisch.
Ich wäre für jeden Tipp oder Beispiel dankbar.
Mein Code:
Die drawLine(..) Methode sollte die fillArc(..) Methode ersetzen um einen Viertelbogen zu zeichnen
Dazu verwende ich die fillArc(...) Methode der Graphics2D Java-Klasse.
Mir sind alle Parameter bekannt, auch, dass der "Kreis" innerhalb eines Rechtecks gezeichnet wird.
Trotz rumspielerei mit den Parametern zur Positionierung komme ich nicht auf das von mir gewünschte Ergebnis.
Eine alternative wäre Icons zwischen den zwei JLabels zu platzieren, doch über dessen Implementation bin ich mir sehr skeptisch.
Ich wäre für jeden Tipp oder Beispiel dankbar.
Mein Code:
Die drawLine(..) Methode sollte die fillArc(..) Methode ersetzen um einen Viertelbogen zu zeichnen
Java:
import java.awt.BasicStroke;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class ArcTest extends JFrame {
private JPanel contentPane;
private JLabel[] labelsArray;
private int mouseClicksCounter = 0;
private Point drawFrom;
private Point drawTo;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ArcTest frame = new ArcTest();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public ArcTest(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 900, 500);
contentPane = new JPanel(){
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(drawFrom != null && drawTo != null){
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(new BasicStroke(3));
g2d.drawLine(drawFrom.x, drawFrom.y, drawTo.x, drawTo.y);
g2d.fillArc(drawFrom.x,drawFrom.y,50,50,0,90);
}
}
};
setContentPane(contentPane);
contentPane.setLayout(new GridLayout(0, 20, 0, 0));
MouseListener labelListener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
mouseClicksCounter++;
if (mouseClicksCounter == 1) {
drawFrom = new Point();
//Mitte des Labels
drawFrom.x = ((JLabel) e.getSource()).getX()
+ ((JLabel) e.getSource()).getWidth() / 2;
drawFrom.y = ((JLabel) e.getSource()).getY()
+ ((JLabel) e.getSource()).getHeight() / 2;
}
if (mouseClicksCounter == 2) {
drawTo = new Point();
//Mitte des Labels
drawTo.x = ((JLabel) e.getSource()).getX()
+ ((JLabel) e.getSource()).getWidth() / 2;
drawTo.y = ((JLabel) e.getSource()).getY()
+ ((JLabel) e.getSource()).getHeight() / 2;
mouseClicksCounter = 0;
contentPane.repaint();
}
}
};
labelsArray= new JLabel[300];
for(int i = 0;i< labelsArray.length;i++){
labelsArray[i] = new JLabel("•");
labelsArray[i].setHorizontalAlignment(SwingConstants.CENTER);
labelsArray[i].setName(String.valueOf(i));
labelsArray[i].addMouseListener(labelListener);
contentPane.add(labelsArray[i]);
}
}
}