A classe Graphics fornece métodos básicos de desenho e a classe Graphics2D fornece recursos de desenho mais poderosos. Esta seção explica a classe Graphics e a próxima seção explica Graphics2D.
A classe Graphics fornece métodos básicos de desenho geométrico, incluindo principalmente: desenhar segmentos de linha, desenhar retângulos, desenhar círculos, desenhar gráficos coloridos, desenhar elipses, desenhar arcos, desenhar polígonos, etc.
1. Desenhe uma linha <br />Para desenhar um segmento de linha na janela, você pode usar o método drawLine() da classe Graphics:
drawLine(int x1,int y1,int x2,int y2)
Por exemplo, o código a seguir desenha um segmento de linha entre o ponto (3,3) e o ponto (50,50) e desenha um ponto no ponto (100,100).
g.drawLine(3,3,50,50);//Desenha um segmento de linha g.drawLine(100,100,100,100);//Desenha um ponto.
2. Desenhe um retângulo <br />Existem dois tipos de retângulos: regulares e arredondados.
(1) Existem dois métodos para desenhar retângulos comuns:
drawRect(int x, int y, int width, int height): Desenhe um retângulo cercado por um wireframe. Os parâmetros x e y especificam a posição do canto superior esquerdo, e os parâmetros largura e altura são a largura e a altura do retângulo.
fillRect(int x, int y, int width, int height): preenche um retângulo com uma cor pré-determinada para obter um bloco retangular colorido.
O código a seguir é um exemplo de desenho de um retângulo:
g.drawRect(80,100,40,25);//Desenha a estrutura de arame g.setColor(Color.yellow);g.fillRect(20,70,20,30);//Desenha o bloco colorido
(2) Existem duas maneiras de desenhar um retângulo arredondado:
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight): É um retângulo arredondado cercado por linhas. Os parâmetros x e y especificam a posição do canto superior esquerdo do retângulo; os parâmetros largura e altura são a largura e a altura do retângulo e arcHeight são o diâmetro transversal e o diâmetro longitudinal do arco de filete, respectivamente;
fillRoundRect(int x, int y, int width, int height, int arcWidth, int archeight): é um retângulo arredondado preenchido com uma cor predeterminada. O significado de cada parâmetro é o mesmo do método anterior.
O código a seguir é um exemplo de desenho de um retângulo:
g.drawRoundRect(10,10,150,70,40,25);//Desenha um retângulo arredondado g.setColor(Color.blue); g.fillRoundRect(80,100,100,100,60,40);//Pinta um bloco retangular arredondado g.drawRoundRect(10,150,40,40,40,40);//Desenha um círculo g.setColor(Color.red); g.fillRoundRect(80,100,100,100,100,100);//Desenha um círculo
Você pode desenhar um círculo desenhando um retângulo arredondado. Quando a largura e a altura do retângulo são iguais, o diâmetro transversal do arco arredondado e o diâmetro longitudinal do arco arredondado também são iguais e iguais à largura e à altura do arco arredondado. retângulo, um círculo é desenhado. Veja os comentários no exemplo acima. O primeiro é desenhar um círculo e o último é pintar um bloco circular.
3. Desenhe um retângulo tridimensional <br />Existem dois métodos para desenhar um retângulo tridimensional:
draw3DRect(int x,int y,int largura,int altura, booleano elevado): Desenhe um retângulo destacado. Entre eles, xey especificam a posição do canto superior esquerdo do retângulo, os parâmetros largura e altura são a largura e altura do retângulo, e o parâmetro levantado é se ele está destacado ou não.
fill3DRect(int x,int y,int width,int height,boolean levantada): Preenche um retângulo destacado com uma cor predeterminada.
O código a seguir é um exemplo de desenho de um retângulo saliente:
g.draw3DRect(80,100,40,25,true);//Desenha um wireframe g.setColor(Color.yellow); g.fill3DRect(20,70,20,30,true);//Desenha um bloco colorido
4. Desenhe uma elipse <br />A elipse é determinada pelos eixos horizontal e vertical da elipse. Existem duas maneiras de desenhar um oval:
drawOval(int x, int y, int width, int height): desenha uma elipse cercada por linhas. Os parâmetros xey especificam a posição do canto superior esquerdo da elipse, e os parâmetros largura e altura são os eixos horizontal e vertical.
fillOval(int x, int y, int width, int height): É um oval preenchido com uma cor pré-determinada e é um bloco de coloração. Você também pode usar o método de desenhar uma elipse para desenhar um círculo. Quando o eixo horizontal e o eixo vertical são iguais, a elipse desenhada é um círculo.
O código a seguir é um exemplo de desenho de uma elipse:
g.drawOval(10,10,60,120);//desenha uma elipse g.setColor(Color.cyan);g.fillOval(100,30,60,60);//pinta um círculo g.setColor(Color.magenta ) ;g.fillOval(15,140,100,50);//Pinte a elipse
5. Desenhe um arco
Existem duas maneiras de desenhar um arco:
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle): Desenhe uma linha de arco como parte da elipse. O centro da elipse é o centro do retângulo envolvente, onde os parâmetros são as coordenadas (x, y) do canto superior esquerdo do retângulo envolvente, a largura é a largura e a altura é a altura. A unidade do parâmetro startAngle é "grau", e o ângulo inicial de 0 graus refere-se à posição das 3 horas. Os parâmetros startAngle e arcAngle indicam que a partir do ângulo startAngle, um arco de graus arcAngle é desenhado no sentido anti-horário. . Por convenção, os graus positivos estão no sentido anti-horário. Os graus negativos são no sentido horário, por exemplo, -90 graus são 6 horas.
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle): Use a cor definida pelo método setColor() para desenhar uma parte da elipse colorida.
O código a seguir é um exemplo de desenho de um arco:
g.drawArc(10,40,90,50,0,180);//Desenha uma linha de arco g.drawArc(100,40,90,50,180,180);//Desenha uma linha de arco g.setColor(Color.yellow); g.fillArc(10,100,40,40,0,-270);//Preenche os três quartos da elipse faltando o canto superior direito g.setColor(Color.green g.fillArc(60,110,110,60,-90); ,- 270);//Preenche os três quartos do canto inferior esquerdo que falta na elipse
6. Desenhe polígonos Um polígono é uma figura plana fechada formada pela conexão de vários segmentos de linha de ponta a ponta. As coordenadas xey das extremidades dos segmentos de linha do polígono são armazenadas em duas matrizes, respectivamente. Desenhar um polígono é conectá-los com segmentos de linha reta na ordem dos pontos de coordenadas fornecidos. A seguir estão dois métodos comumente usados para desenhar polígonos:
drawPolygon(int xpoints[],int yPoints[],int nPoints): Desenha um polígono
fillPolygon(int xPoints[],int yPoints[],int nPoints): Pinte o polígono com a cor definida pelo método setColor(). A matriz xPoints[] armazena x pontos de coordenadas, yPoints[] armazena y pontos de coordenadas e nPoints é o número de pontos de coordenadas.
Observe que o método acima não fecha automaticamente o polígono. Para desenhar um polígono fechado, o último ponto do ponto de coordenada fornecido deve ser igual ao primeiro ponto.
int px1[]={50,90,10,50};//Um polígono pode ser desenhado somente quando o primeiro e o último ponto são iguais int py1[]={10,50,50,10}; ]={140.180.170.180.140.100.110.140}; py2[]={5,25,35,45,65,35,25,5}; g.setColor(Color.blue); g.fillPolygon(px1,py1,4); ;g.drawPolygon(px2,py2,9);
Você também pode usar objetos poligonais para desenhar polígonos. Crie um objeto polígono usando a classe polígono Polygon e, a seguir, use esse objeto para desenhar polígonos. Principais métodos da classe Polygon:
Por exemplo, o código a seguir desenha um triângulo e o preenche com um triângulo amarelo. Observe que usar um objeto polígono para desenhar um polígono fechado não requer que o primeiro e o último ponto coincidam.
int x[]={140,180,170,180,140,100,110,100}; int y[]={5,25,35,45,65,45,35,25}; .addPoint(90,50); polygon1.addPoint(10,50); g.drawPolygon(polygon1); g.setColor(Color.yellow2 = new Polygon(x,y,8);
7. Apagar bloco retangular <br />Quando precisar ter um retângulo vazio no meio de um gráfico colorido, você pode preencher um bloco retangular com a cor de fundo, o que equivale a usar uma “borracha” no bloco retangular. O método é:
clearRect(int x, int y, int width, int height): Apaga a coloração de um bloco retangular especificado pelos parâmetros.
Por exemplo, o código a seguir implementa cores que apagam um bloco retangular em um círculo:
g.setColor(Color.azul); g.fillOval(50,50,100,100);g.clearRect(70,70,40,55);
8. Limite a área de exibição do desenho <br />Use um retângulo para representar a área de exibição do gráfico. O gráfico deve ser válido dentro do intervalo especificado. Novos valores de coordenadas não serão recalculados e os excedidos. parte não será exibida automaticamente. O método é clipRect(int x, int y, int width, int height), que limita a exibição dos gráficos à área especificada e não exibe a parte excedente. Quando múltiplas áreas restritas são cobertas, obtém-se a área de intersecção das áreas restritas. Por exemplo, código:
g.clipRect(0,0,100,50);g.clipRect(50,25,100,50);
Equivalente a
g.clipRect(50,25,50,25);
9. Copiar gráficos <br />Use o método copyArea() da classe Graphics para copiar gráficos. O formato de uso é:
copyArea(int x, int y, int width, int height, int dx, int dy), dx e dy representam respectivamente o número de pixels deslocados colando os gráficos na posição original. para baixo. Valores negativos são deslocamentos para a esquerda ou para cima. O ponto de referência para o deslocamento é a coordenada do canto superior esquerdo do retângulo a ser copiado.
Por exemplo, o código a seguir ilustra a cópia de gráficos, personalizando parte de um retângulo e a totalidade de outro retângulo.
g.drawRect(10,10,60,90); g.fillRect(90,10,60,90); 50,60,60,10,80);
[Exemplo] Um pequeno aplicativo reescreve o método update() para limpar apenas o bloco circular, não o texto, e a janela exibe um quadrado vermelho em constante movimento.
importar java.applet.*;importar java.awt.*;classe pública Exemplo7_3 estende Applet{ int i=1; public void init(){ setBackground(Color.yellow } public void paint(Gráficos g){ i = i); +8; if(i>160)i=1; g.drawString("Estou aprendendo o método update()",100,100); try{ Thread.sleep(100); .clearRect (i,10,200,100);//Não limpe "Estou aprendendo o método update()" paint(g }});
Um programa de desenho geral deve herdar JFrame e definir uma subclasse de janela JFrame, e também herdar JPanel e definir uma subclasse JPanel. Redefina o método paintComponent() na subclasse JPanel e chame o método de desenho neste método para desenhar vários gráficos.
[Exemplo] Aplicação usando modo de desenho XOR.
import javax.swing.*;import java.awt.*;classe pública Exemplo7_4 estende JFrame{ public static void main(String args[]){ GraphicsDemo myGraphicsFrame = new GraphicsDemo(); setBackground(Color.white); } public void paintComponent(Gráficos g){ super.paintComponent(g); setBackground(Color.yellow); //A cor de fundo é amarelo g.setXORMode(Color.red); //Defina o modo de desenho XOR e a cor é vermelho g.setColor(Color.green); 20, 80 , 40); //A cor real é uma mistura de verde + amarelo = cinza g.setColor(Color.yellow); 40); //A segunda metade é amarelo+amarelo=ler, a primeira metade é amarelo+cinza g.setColor(Color.green); verde+amarelo Cor mista = cinza.fillRect(60, 70, 80, 40); =Cor de fundo, a última metade é verde+amarelo = cinza g.setColor(Color.green); 100, 100, 200, 200); //Igual ao acima/*Desenhe uma linha reta parcialmente sobreposta. A seção intermediária da linha reta original é cinza+cinza=cor de fundo e a parte estendida é verde+amarelo=cinza.*/ g.drawLine(140, 140). , 220, 220); g. setColor(Color.yellow); //Analisar as mudanças de cor das seguintes linhas retas, que se sobrepõem à força anterior g.drawLine(20, 30, 160, 30); g.drawLine(20, 75, 160, 75); }}class GraphicsDemod estende JFrame{ public GraphicsDemo(){ this.getContentPane().add(new ShapesPanel()); (300, 300); setVisível(verdadeiro);