1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| package test.paint;
import javax.swing.*;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import java.awt.*;
public final class Main extends JComponent {
private static final int SIDE = 10;
private static final TexturePaint TRANSPARENCY_PATTERN = createTransparencyPattern();
public static void main(String... args) {
SwingUtilities.invokeLater(Main::startEDT);
}
private static final void startEDT() {
final var border = new CompoundBorder(new EmptyBorder(10, 10, 10, 10), new LineBorder(Color.BLACK, 1));
final var content = new Main();
content.setBorder(border);
final var frame = new JFrame("Test");
frame.setSize(800, 600);
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(content, BorderLayout.CENTER);
frame.setVisible(true);
}
private static final TexturePaint createTransparencyPattern() {
final var ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
final var gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
final var image = gc.createCompatibleImage(SIDE * 2, SIDE * 2, Transparency.OPAQUE);
final var g2d = image.createGraphics();
try {
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, SIDE * 2, SIDE * 2);
g2d.setColor(Color.LIGHT_GRAY);
g2d.fillRect(SIDE, 0, SIDE, SIDE);
g2d.fillRect(0, SIDE, SIDE, SIDE);
} finally {
g2d.dispose();
}
return new TexturePaint(image, new Rectangle(0, 0, SIDE * 2, SIDE * 2));
}
@Override
public void paintComponent(final Graphics g) {
super.paintComponents(g);
final var insets = getInsets();
final var size = getSize();
final int canvasX = insets.left;
final int canvasY = insets.top;
final int canvasWidth = Math.max(0, size.width - insets.left - insets.right);
final int canvasHeight = Math.max(0, size.height - insets.top - insets.bottom);
if (canvasWidth > 0 && canvasHeight > 0) {
final var g2d = (Graphics2D) g.create(canvasX, canvasY, canvasWidth, canvasHeight);
try {
doPaint(g2d, canvasWidth, canvasHeight);
} finally {
g2d.dispose();
}
}
}
protected void doPaint(final Graphics2D g2d, final int width, final int height) {
g2d.setPaint(TRANSPARENCY_PATTERN);
g2d.fillRect(0, 0, width, height);
// [...]
}
} |
Partager