java 如何在JPanel上画线
https://zhidao.baidu.com/question/1924075414532702787.html
java 如何在JPanel上画线 10
使用paint(Graphics g){}画线时,是不停地调用这个方法,但是我不需要不停地调用这个方法,只要画一次就行了,因为我每次画线是遍历一个很大的数组,如果不停地调用paint性能不好,Graphics又不能实例化。
推荐于2017-09-20 09:59:09
最佳答案
如果享用鼠标划就要加上鼠标事件,然后得到位置坐标,重划JPanel.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import java.util.*;import javax.swing.*;import javax.swing.Timer;import java.awt.geom.Line2D;public class Line {public static void main(String[] args) {LineFrame frame = new LineFrame();frame.setDefaultCloseOperation(3);frame.show();}}class LineFrame extends JFrame{public LineFrame(){setTitle("Line");setResizable(false);setSize(300,200);LinePanel panel = new LinePanel();Container contentPane = getContentPane();contentPane.add(panel);}}class LinePanel extends JPanel {Graphics2D g2;public LinePanel(){}public void paintComponent(Graphics g){super.paintComponent(g);g2 = (Graphics2D)g;g2.draw(line);}private double leftX = 100.0;private double topY =500.0 ;private double W = 50.0;private double H = 50.0;private double MovLen = 5.0;private Line2D line =new Line2D.Double(leftX,topY,W,H);} |
其他回答
可以定义全局的变量来保存Graphics。
在组件处于可见的状态下使用getGraphics。代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
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 }} |
本回答被提问者采纳
302652034_bai | 推荐于2017-09-06 16:04:42


浙公网安备 33010602011771号