![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
自己制作的画图工具,画图之后出现重影,左边的按钮也被出现重影,将窗口拉大或拉小就消失了,为什么?
importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.awt.image.Buff...
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.event.*;
public class Paint {
//面板
JFrame f=new JFrame("画图工具");
Draw drawpanel=new Draw();
JPanel toolpanel=new JPanel();
//画板大小
private final int height=600;
private final int width=800;
//菜单栏
MenuBar menubar=new MenuBar();
Menu menu1=new Menu("文件");
Menu menu2=new Menu("设置");
MenuItem setcolor=new MenuItem("颜色");
MenuItem setstroke=new MenuItem("笔的粗细");
MenuItem open=new MenuItem("打开");
MenuItem save=new MenuItem("保存");
MenuItem create=new MenuItem("新建");
//各项功能键
String[] tool={"框选","橡皮擦","油漆","取色","放大镜","铅笔","刷子","喷漆","文字","直线","曲线","矩形","多边形","椭圆","圆矩形","三角形"};
//定义bufferedImage对象
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
JButton[] bs=new JButton[16];
Graphics g=image.getGraphics();
//鼠标的位置
private int x=-1;
private int y=-1;
//用于保存特殊图形
private String shape="";
//保存笔画颜色和粗细
private Color forecolor=new Color(255,0,0);
private float lineWidth = 1.0f;
public void init(){
drawpanel.setPreferredSize(new Dimension(width,height));
JScrollPane pane=new JScrollPane(drawpanel);
menu1.add(open);
menu1.add(save);
menu1.add(create);
menu2.add(setcolor);
menu2.add(setstroke);
menubar.add(menu1);
menubar.add(menu2);
//初始化道具面板
toolpanel.setLayout(new GridLayout(8,2,2,2));
for(int i=0;i<bs.length;i++){
bs[i]=new JButton(tool[i]);
toolpanel.add(bs[i]);
}
//将背景颜色变成白色
g.fillRect(0,0,width,height);
//监听鼠标移动动作
drawpanel.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
if(x>0&&y>0){
//设置笔画颜色和笔粗细
g.setColor(forecolor);
//画出一小段直线
((Graphics2D)g).setStroke(new BasicStroke(lineWidth));
((Graphics2D)g).drawLine(x,y,e.getX(),e.getY());
}
x=e.getX();
y=e.getY();
//重绘面板
drawpanel.repaint();
}
});
drawpanel.addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e){
x=-1;
y=-1;
}
});
f.setSize(1200,800);
f.setMenuBar(menubar);
f.add(toolpanel,BorderLayout.WEST);
f.add(pane,BorderLayout.CENTER);
//f.setResizable(false);
f.setVisible(true);
}
public static void main(String[] arg){
new Paint().init();
}
class Draw extends JPanel{
public void paint(Graphics g){
g.drawImage(image,0,0,null);
}
}
} 展开
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.event.*;
public class Paint {
//面板
JFrame f=new JFrame("画图工具");
Draw drawpanel=new Draw();
JPanel toolpanel=new JPanel();
//画板大小
private final int height=600;
private final int width=800;
//菜单栏
MenuBar menubar=new MenuBar();
Menu menu1=new Menu("文件");
Menu menu2=new Menu("设置");
MenuItem setcolor=new MenuItem("颜色");
MenuItem setstroke=new MenuItem("笔的粗细");
MenuItem open=new MenuItem("打开");
MenuItem save=new MenuItem("保存");
MenuItem create=new MenuItem("新建");
//各项功能键
String[] tool={"框选","橡皮擦","油漆","取色","放大镜","铅笔","刷子","喷漆","文字","直线","曲线","矩形","多边形","椭圆","圆矩形","三角形"};
//定义bufferedImage对象
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
JButton[] bs=new JButton[16];
Graphics g=image.getGraphics();
//鼠标的位置
private int x=-1;
private int y=-1;
//用于保存特殊图形
private String shape="";
//保存笔画颜色和粗细
private Color forecolor=new Color(255,0,0);
private float lineWidth = 1.0f;
public void init(){
drawpanel.setPreferredSize(new Dimension(width,height));
JScrollPane pane=new JScrollPane(drawpanel);
menu1.add(open);
menu1.add(save);
menu1.add(create);
menu2.add(setcolor);
menu2.add(setstroke);
menubar.add(menu1);
menubar.add(menu2);
//初始化道具面板
toolpanel.setLayout(new GridLayout(8,2,2,2));
for(int i=0;i<bs.length;i++){
bs[i]=new JButton(tool[i]);
toolpanel.add(bs[i]);
}
//将背景颜色变成白色
g.fillRect(0,0,width,height);
//监听鼠标移动动作
drawpanel.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
if(x>0&&y>0){
//设置笔画颜色和笔粗细
g.setColor(forecolor);
//画出一小段直线
((Graphics2D)g).setStroke(new BasicStroke(lineWidth));
((Graphics2D)g).drawLine(x,y,e.getX(),e.getY());
}
x=e.getX();
y=e.getY();
//重绘面板
drawpanel.repaint();
}
});
drawpanel.addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e){
x=-1;
y=-1;
}
});
f.setSize(1200,800);
f.setMenuBar(menubar);
f.add(toolpanel,BorderLayout.WEST);
f.add(pane,BorderLayout.CENTER);
//f.setResizable(false);
f.setVisible(true);
}
public static void main(String[] arg){
new Paint().init();
}
class Draw extends JPanel{
public void paint(Graphics g){
g.drawImage(image,0,0,null);
}
}
} 展开
1个回答
展开全部
这是因为java的绘图类有个缺陷 就是不能自动重构界面,也就是不能自动刷新,窗口的repaint方法可以解决这个问题
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询