swing怎么在jframe画线,全部用swing的组件
3个回答
展开全部
我给你写一个最最最最简单的 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();
}
}
--------------------------------------------
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 方法画上去。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
重写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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
}
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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询