K
k-s
Gast
Hallo
Wie zeichnet man am bestem einen Rechteck mit einem Loch bestimmter Größe in dem Mitte?
Wie zeichnet man am bestem einen Rechteck mit einem Loch bestimmter Größe in dem Mitte?
schalentier hat gesagt.:Am besten auf Millimeterpapier mit Zirkel und Bleistift. Funktioniert garantiert!
k-s hat gesagt.:=))))
Ich meine ein Loch, durch den man untere Zeichnungen sehen kann. Und -das Loch muss quadratisch sein =)
(x0,y0) width (x0+width,y0)
+----------------------------------+
| ^ |
| bheight_up |
| v |
|..............+---+...............|
| <bwidth_l> |xxx| <bwidth_r> | height
|..............+---+...............|
| ^ |
| bheight_down |
| v |
+----------------------------------+
(x0,y0+height) (x0+width,y0+height)
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.JFrame;
/*
* Created on 26.04.2007
*/
/**
* @author Manuel Alabor
* @version 1.0
*/
public class RectangleWithHole extends JComponent {
public RectangleWithHole() {
setPreferredSize(new Dimension(100,100));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
// Hintergrund:
g2.setColor(Color.white);
g2.fillRect(0, 0, getWidth(), getHeight());
g2.setColor(Color.blue);
g2.fillOval(0, 0, 50, 50);
// Maske:
BufferedImage mask = new BufferedImage(100,80, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2Mask = (Graphics2D)mask.getGraphics();
g2Mask.setColor(Color.red);
g2Mask.fillRect(0, 0, 100, 80);
g2Mask.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OUT));
g2Mask.fillRect(40,30,20,20);
g2Mask.dispose();
// Maske halbtransparent auf Hintergrund zeichnen:
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f));
g2.drawImage(mask, 0, 0, null);
}
/**
* @param args
*/
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new RectangleWithHole());
frame.pack();
frame.setVisible(true);
}
}