Сигнал Unix является своего рода сообщением, которое может быть отправлено в и от процессов Unix. Они могут сделать, вещам нравится, говорят процессу выходить (SIGKILL) или что процесс имел недопустимую ссылку памяти (SIGSEGV) или что процесс был уничтожен пользователем, поражающим управление-c (SIGINT).
от *отклоняют командную строку, введите:
сигнал
человека, что желание должно Вы все доступные сигналы.
Вам необходимо использовать класс Area . Этот пример демонстрирует, как сделать то, о чем вы просите:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JPanel {
public static void main(String[] args) {
JFrame f = new JFrame();
Test t = new Test();
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(t,BorderLayout.CENTER);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public Test() {
setPreferredSize(new Dimension(300, 300));
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g.create();
Rectangle2D rectangleNotToDrawIn = new Rectangle2D.Double(100, 100, 20, 30);
Area outside = calculateRectOutside(rectangleNotToDrawIn);
g2.setPaint(Color.white);
g2.fillRect(0, 0, getWidth(), getHeight());
g2.setPaint(Color.black);
g2.setClip(outside);
g2.drawLine(0, 0, getWidth(), getHeight());
}
private Area calculateRectOutside(Rectangle2D r) {
Area outside = new Area(new Rectangle2D.Double(0, 0, getWidth(), getHeight()));
outside.subtract(new Area(r));
return outside;
}
}
Это можно сделать с помощью клипа AWT. Вам необходимо знать границы прямоугольника, который вы хотите исключить, и внешние границы области рисования.
Следующий демонстрационный код открывает фрейм и отображает в нем одну панель. Метод рисования панели создает пример клипа, который выглядит как прямоугольник с прямоугольным отверстием посередине, тогда как на самом деле это многоугольник, который описывает область вокруг области, которую мы хотим исключить. Прямоугольник обрезки должен состоять из границ исключенного прямоугольника и внешнего края области рисования, но я оставил жестко запрограммированные значения, чтобы сделать его простым и лучше проиллюстрировать работу (я надеюсь!)
+-------------------+ | clip drawing area | +---+-----------+ | | | excluded | | | | area | | | +-----------+ | | | +-------------------+
Этот метод имеет преимущество перед расчетом пересечения линий вручную в том, что он предотвращает попадание всего рисования AWT в исключенную область. Я не Не знаю, полезно это для вас или нет.
Моя демонстрация затем рисует черный прямоугольник по всей области и одну белую диагональную линию, проходящую через него, чтобы проиллюстрировать работу клипа.
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 );
}
}