그리기 모드는 나중에 그린 그래픽이 먼저 그린 그래픽과 겹칠 때 겹치는 부분의 색상을 결정하는 방법을 말합니다. 예를 들어, 나중에 그린 색상이 이전에 그려진 색상을 덮어쓰거나, 나중에 그린 두 색상과 먼저 그린 색상이 특정 규칙에 따라 혼합됩니다. 두 가지 주요 모드가 있습니다: 일반 모드와 XOR 모드: 일반 모드는 나중에 그려진 그래픽이 이전에 그려진 그래픽 위에 겹쳐서 이전 그래픽의 겹치는 부분이 더 이상 표시되지 않는 것입니다. XOR 모드는 그리기를 모양별로 색칠하는 것으로 처리합니다. XOR 모드로 그리는 경우 현재 그리는 색, 원래 그리는 색, XOR 모드에서 설정한 색에 대해 특정 작업을 수행하여 실제 그리는 색을 얻습니다. 그리기 모드를 설정하는 방법은 다음과 같습니다.
setPaintMode(): 그리기 모드를 오버레이 모드(일반 모드)로 설정합니다. 일반 모드는 그리기의 기본 모드입니다.
setXORMode(Color c): 그리기 모드를 XOR 모드로 설정하고, 매개변수 c는 XOR 모드에서 설정된 그리기 색상입니다.
배경색이 B이고, setXORMode()로 설정된 색상이 C이며, 배경색이 아닌 D가 그리기에 사용된다고 가정합니다. XOR 모드에는 실제 그리기 색상을 결정하는 규칙이 다음과 같습니다. 🎜>
B + B = C, 배경색으로 그리면 C색이 나타납니다. D + D = B, 그래픽을 다시 그릴 때 원래 그려진 그래픽이 지워질 수 있습니다. B + D = B와 D의 혼합 색상(B와 D가 동일하지 않은 경우). D로 색칠한 다음 E로 색칠한 경우 결과는 다음과 같습니다. D + E = D와 E의 혼합 색상(D와 E가 동일하지 않은 경우) ). XOR 그리기 모드 예시import javax.swing.*; import java.awt.*; public class Example7_4 extends JFrame{ public static void main(String args[]){ GraphicsDemo myGraphicsFrame = new GraphicsDemo(); } } class ShapesPanel extends JPanel{ SharpesPanel(){ setBackground(Color.white); } public void paintComponent(Graphics g){ super.paintComponent(g); setBackground(Color.yellow); //背景色为黄色 g.setXORMode(Color.red); //设置XOR绘图模式,颜色为红色 g.setColor(Color.green); g.fillRect(20, 20, 80, 40); //实际颜色是green + yellow的混合色=灰色 g.setColor(Color.yellow); g.fillRect(60, 20, 80, 40); //后一半是yellow+yellow=read,前一半是yellow+灰色 g.setColor(Color.green); g.fillRect(20, 70, 80, 40); //实际颜色是green+yellow的混合色=灰色. g.fillRect(60, 70, 80, 40); //前一半是(green+yellow)+gray =背景色,后一半是green+yellow = gray g.setColor(Color.green); g.drawLine(80, 100, 180, 200); //该直线是green+yellow = gray g.drawLine(100, 100, 200, 200); //同上 /*再绘制部分重叠的直线.原直线中间段是灰色+灰色=背景色,延长部分是green+yellow=gray.*/ g.drawLine(140, 140, 220, 220); g.setColor(Color.yellow); //分析下列直线颜色变化,与早先的力有重叠 g.drawLine(20, 30, 160, 30); g.drawLine(20, 75, 160, 75); } } class GraphicsDemod extends JFrame{ public GraphicsDemo(){ this.getContentPane().add(new ShapesPanel()); setTile("基本绘图方法演示"); setSize(300, 300); setVisible(true); } }