Puede hacerlo con un clip AWT. Deberá conocer los límites del rectángulo que desea excluir y los límites exteriores de su área de dibujo.
El siguiente código de demostración abre un marco y muestra un solo panel en él. El método de pintura del panel establece un clip de ejemplo que se parece a un rectángulo con un agujero rectangular en el centro, cuando de hecho es un polígono que describe el área alrededor del área que queremos excluir. El rectángulo del clip debe estar compuesto por los límites del rectángulo excluido y el borde exterior del área de dibujo, pero he dejado valores codificados para mantenerlo simple e ilustrar mejor el funcionamiento (¡espero!)
+-------------------+
| clip drawing area |
+---+-----------+ |
| | excluded | |
| | area | |
| +-----------+ |
| |
+-------------------+
Este método tiene el beneficio sobre el cálculo manual de la intersección de líneas, ya que evita que todas las pinturas AWT entren en el área excluida. No sé si eso es útil para ti o no.
Mi demostración pinta un rectángulo negro en toda el área y una sola línea diagonal blanca que lo atraviesa, para ilustrar el funcionamiento del clip.
public class StackOverflow extends JFrame {
public static void main(String[] args) {
new StackOverflow();
}
private StackOverflow() {
setTitle("Clip with a hole");
setSize(320,300);
getContentPane().add(new ClipPanel());
setVisible(true);
}
}
class ClipPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Polygon clip = new Polygon(
new int[]{ 0, 100, 100, 0, 0, 20, 20, 80, 80, 0 },
new int[]{ 0, 0, 60, 60, 20, 20, 40, 40, 20, 20 },
10
);
g.setClip(clip);
g.setColor(Color.BLACK);
g.fillRect(0,0,100,60);
g.setColor(Color.WHITE);
g.drawLine(0,0,100,60);
}
}
Gracias, perfecto! – tuler
+1 - Mucho mejor que el mío :) – banjollity
El método del Área es mejor en términos de legibilidad y extensibilidad (puede crear cualquier forma y clip en su exterior) pero creo que podría tener algunos problemas de rendimiento (la clase Área es un poco sobre la cima tal vez). Debe compararlo si necesita dibujar en el clip muchas veces y ver si el otro método es más rápido. –