swing怎么在jframe画线,全部用swing的组件

 我来答
帐号已注销
2011-11-15 · TA获得超过5622个赞
知道大有可为答主
回答量:1459
采纳率:0%
帮助的人:1376万
展开全部
我给你写一个最最最最简单的 swing 画图的 Demo:
--------------------------------------------
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class PaintDemo {
//主窗口碰凯
private JFrame frmPaint = new JFrame("Paint Demo"碰吵核);
//绘画面板
private JPanel pnlPaint = new JPanel();
//定义当前点坐标
private int x, y;

public PaintDemo () {
//创建 MouseAdapter
MouseAdapter ma = new MouseAdapter() {
//添加点击事件
@Override
public void mousePressed (MouseEvent me) {
//鼠标按下,则把当前点坐标设定为鼠标位置
x = me.getX();
y = me.getY();
//画线,从点 (x,y) 到点 (x,y)
pnlPaint.getGraphics().drawLine(x, y, x, y);
}
//添加拖拽事件
@Override
public void mouseDragged (MouseEvent me) {
//画线,从点 (x,y) 到鼠笑掘标当前位置
pnlPaint.getGraphics().drawLine(x, y, me.getX(), me.getY());
//更新当前点,这是为鼠标位置
x = me.getX();
y = me.getY();
}
};

//初始化绘画面板
pnlPaint.setBackground(Color.WHITE);
pnlPaint.addMouseListener(ma);
pnlPaint.addMouseMotionListener(ma);

//初始化主窗口
frmPaint.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmPaint.setSize(800, 600);
frmPaint.setLocationRelativeTo(null);
frmPaint.setContentPane(pnlPaint);
frmPaint.setVisible(true);
}

public static void main (String args[]) {
new PaintDemo();
}
}
追问
窗口一发生变化,之前画的线就没有了,怎么禁止窗体重画?
pnlPaint.getGraphics().drawLine(x, y, me.getX(), me.getY());
我单独把这句话拿出来,之后 就报空指针。。
例如pnlPaint.getGraphics().drawLine(12, 21, 54, 99);
这样就报空了。。
追答
你想保存之前的画得内容就复杂了,你需要自己用一个数据结构存放画好的内容,例如一个数组。
然后要重写 paint (Graphics g) 方法,把你存在数据结构里的内容全部在这个方法里用 g 的各种 draw 方法画上去。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
葵崽在等人
2011-11-15 · TA获得超过171个赞
知道答主
回答量:109
采纳率:0%
帮助的人:48.8万
展开全部
重写paint方法,在里面画线
追问
有例子么?
追答
public static void main(String[] args) {
new JFrame() {
{
setSize(400, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public void paint(java.awt.Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
g.drawLine(0, 0, 200, 200);
};
}.setVisible(true);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daay1986
2011-11-15 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1471万
展开全部
public class DrawPanel extends JPanel {

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(3);
frame.setContentPane(new JPanel(){

@Override
public void paint(Graphics g) {
super.paint(g);
g.drawString("Java", 50, 50);
}
});
frame.setVisible(true);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式