这个方法是画一条直线,都知道两点确定一条直线,而在坐标中由横(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.Graphicsimport 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
}
}