JAVA drawLine()方法怎么用?

Python013

JAVA drawLine()方法怎么用?,第1张

这个方法是画一条直线,都知道两点确定一条直线,而在坐标中由横(X)、纵坐标(y)确定一个点,这四参数实际就是确定两个点,要画的直线的起始点横纵坐标和终点的横纵坐标。

X1,Y1是确定直线的起始点,即横坐标为x1,纵坐标为y1的点。同理x2,y2确定直线的终点。

例:

A(x1,y1) B(x2,y2) 就可以画出直线AB了。

参数:

x1 - 第一个点的 x 坐标。

y1 - 第一个点的 y 坐标。

x2 - 第二个点的 x 坐标。

y2 - 第二个点的 y 坐标。

扩展资料:

注意事项

该方法只能绘制单条直线;如果需要同时绘制多条直线,则可以使用drawLines方法。

基本语法:public void drawLine (float startX, float startY, float stopX, float stopY, Paint paint)

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas)

paint.setColor(Color.BLACK)                    //设置画笔颜色

canvas.drawColor(Color.WHITE)                  //设置背景颜色

paint.setStrokeWidth((float) 1.0)              //设置线宽

canvas.drawLine(50, 50, 450, 50, paint)        //绘制直线

paint.setStrokeWidth((float) 5.0)              //设置线宽

canvas.drawLine(50, 150, 450, 150, paint)      //绘制直线

paint.setStrokeWidth((float) 10.0)             //设置线宽

canvas.drawLine(50, 250, 450, 250, paint)      //绘制直线

paint.setStrokeWidth((float) 15.0)             //设置线宽

canvas.drawLine(50, 350, 450, 350, paint)      //绘制直线

paint.setStrokeWidth((float) 20.0)             //设置线宽

canvas.drawLine(50, 450, 450, 450, paint)      //绘制直线

}

我晕,组件要重绘,就使用paintComponent方法吧,没有什么灵活不灵活的

import java.awt.Color

import java.awt.EventQueue

import java.awt.Graphics

import java.awt.Graphics2D

import java.awt.GridLayout

import javax.swing.BorderFactory

import javax.swing.JComponent

import javax.swing.JFrame

import javax.swing.JPanel

import javax.swing.border.EmptyBorder

public class FrameDemo extends JFrame {

private JPanel contentPane

TestComponent tc1, tc2

/**

* Launch the application.

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

FrameDemo frame = new FrameDemo()

frame.setVisible(true)

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

} catch (Exception e) {

e.printStackTrace()

}

}

})

}

public FrameDemo() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

setBounds(100, 100, 450, 300)

contentPane = new JPanel()

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5))

setContentPane(contentPane)

contentPane.setLayout(new GridLayout(2, 1, 10, 10))

tc1 = new TestComponent()

tc1.setBorder(BorderFactory.createLineBorder(Color.BLUE))

tc2 = new TestComponent()

tc2.setBorder(BorderFactory.createLineBorder(Color.PINK))

contentPane.add(tc1)

contentPane.add(tc2)

}

}

class TestComponent extends JComponent {

public void paintComponent(Graphics g1) {

Graphics2D g = (Graphics2D) g1

g.setColor(Color.RED)

g.drawLine(0, 0, this.getWidth(), this.getHeight())

}

}

可以定义全局的变量来保存Graphics。

在组件处于可见的状态下使用getGraphics。代码如下:

import java.awt.Graphics

import java.awt.event.KeyEvent

import java.awt.event.KeyListener

import javax.swing.JFrame

import javax.swing.JPanel

public class J extends JFrame implements KeyListener{

 Graphics g=null//全局变量

 JPanel jp=new JPanel()

 

 public J()

 {

  add(jp)

  setSize(100, 100)

  setVisible(true)//必须放在getGraphics之前

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

  g=jp.getGraphics()

  if(g==null)

  {

   System.out.println("NULL")

  }

  this.addKeyListener(this)

  

 }

 

 static public void main(String []agr){

  new J()

 }

 @Override

 public void keyPressed(KeyEvent e) {

  // TODO Auto-generated method stub

  System.out.println("draw")

  g.drawLine(0, 0, 50, 50)

 }

 @Override

 public void keyReleased(KeyEvent e) {

  // TODO Auto-generated method stub

  

 }

 @Override

 public void keyTyped(KeyEvent e) {

  // TODO Auto-generated method stub

  

 }

}