Java 当使用重绘时,它看起来像这样,为什么?

Java 当使用重绘时,它看起来像这样,为什么?,java,Java,我只想创建一个代码生成器。当用户绘制某些内容,然后单击“生成”时,它将显示您刚才绘制的代码-figture1。但问题是我使用clearscreen它是布尔值来清理屏幕。当我画一些东西时,它看起来像图2,我不知道为什么?-图3了解更多细节 打包程序; 导入java.awt.Color; 导入java.awt.Font; 导入java.awt.Graphics; 导入java.awt.event.ActionEvent; 导入java.awt.event.ActionListener; 导入java

我只想创建一个代码生成器。当用户绘制某些内容,然后单击“生成”时,它将显示您刚才绘制的代码-figture1。但问题是我使用clearscreen它是布尔值来清理屏幕。当我画一些东西时,它看起来像图2,我不知道为什么?-图3了解更多细节

打包程序;
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.lang.reflect.Array;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
公共课程{
公共静态void main(字符串[]args){
主要工程=新的主要工程();
System.out.println(“color=“+work.inprogram.color”);
System.out.println(“pen=“+work.inprogram.pen”);
}
}
类Main扩展了JFrame
{
输入程序输入程序;
Main()
{
inprogram=新inprogram();
setTitle(“工具”);
设置大小(1138743);
setLocationRelativeTo(空);
setLayout(空);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
可设置大小(假);
添加(程序中);
setVisible(真);
}
}
程序中的类扩展了JPanel
{
牵引段牵引段;
串色、笔;
公共程序{
设置大小(1138743);
setLayout(空);
JLabel工具=新的JLabel(“工具”);
setFont(新字体(“Comic Sans MS”,字体.PLAIN,40));
增加(工具);
工具.立根(60,52,187,61);
//银行科
JButton笔=新JButton(“笔”);
钢笔.立根(60159151,48);
setFont(新字体(“Comic Sans MS”,字体.PLAIN,35));
画笔(假);
钢笔。背景(颜色。白色);
画笔。设置焦距(假);
加(笔);
pen.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件g){
//后面的打字错误
//pen=xxxx;
}
});
//农奈区
JButton color=新JButton(“颜色”);
颜色.立根(60300151,48);
setFont(新字体(“Comic Sans MS”,字体.PLAIN,35));
颜色。已涂漆(假);
颜色.背景(颜色.白色);
颜色。设置焦点已上漆(假);
添加(颜色);
addActionListener(新的ActionListener(){
@凌驾
已执行的公共无效操作(操作事件g){
//这里输入错误,农奈
//颜色=xxxx;
}
});
//杰基科
drawSection=新的drawSection();
拉深剖面.立根(259,55819549);
添加(绘图部分);
//普姆区
JButton generate=新JButton(“生成代码”);
生成.setBounds(55861326868);
generate.setFont(新字体(“Comic Sans MS”,Font.PLAIN,30));
generate.setboordpainted(false);
生成.挫折背景(颜色.白色);
generate.setFocusPainted(false);
添加(生成);
generate.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件g){
}
});
}
}
类DrawSection扩展了JPanel
{
int x,y;
布尔值=真;
公众支取组(){
挫折地面(颜色:白色);
设置大小(830575);
addMouseMotionListener(新的MouseAdapter(){
@凌驾
公共无效鼠标标记(鼠标事件e){
x=e.getX();
y=e.getY();
重新油漆();
}
});
}
@凌驾
受保护组件(图形g)
{
如果(清除屏幕)
{
g、 setColor(Color.WHITE);
g、 fillRect(0830575);
清除屏幕=错误;
}
g、 设置颜色(颜色为黑色);
g、 椭圆形(x,y,10,10);
}
}
图1-when不单击任何内容

图2-单击时

图3-单击时

组件大小不匹配

当您在程序中创建顶部容器
Inprogram
时,您将其大小设置为
setSize(830575)在tis构造函数中

创建之后,您将其大小设置为
drawSection.setBounds(259,55819549)并将其添加到程序中

这种差异会导致你看到的奇怪效果

解决方案: 最简单的方法是删除程序中的大小设置:

//Jacky's Section
drawSection=new DrawSection();
//drawSection.setBounds(259, 55, 819, 549);
add(drawSection);
更好的方法是让
DrawSection
确定它的大小并绘制它的大小

//constructor
public DrawSection() {
    setBackground(Color.white);
    //setSize(830,575); don't set sizer
    addMouseMotionListener(new MouseAdapter() {...});
}
@Override
protected void paintComponent(Graphics g)
{
    if(clearscreen)
    {
        g.setColor(Color.WHITE);
        //g.fillRect(0, 0,830,575);
        g.fillRect(0, 0,getWidth(),getHeight()); //no more hardcoded size
        clearscreen=false;
    }
    g.setColor(Color.BLACK);
    g.fillOval(x,y,10,10);
}

组件大小不匹配

当您在程序中创建顶部容器
Inprogram
时,您将其大小设置为
setSize(830575)在tis构造函数中

创建之后,您将其大小设置为
drawSection.setBounds(259,55819549)并将其添加到程序中

这种差异会导致你看到的奇怪效果

解决方案: 最简单的方法是删除程序中的大小设置:

//Jacky's Section
drawSection=new DrawSection();
//drawSection.setBounds(259, 55, 819, 549);
add(drawSection);
更好的方法是让
DrawSection
确定它的大小并绘制它的大小

//constructor
public DrawSection() {
    setBackground(Color.white);
    //setSize(830,575); don't set sizer
    addMouseMotionListener(new MouseAdapter() {...});
}
@Override
protected void paintComponent(Graphics g)
{
    if(clearscreen)
    {
        g.setColor(Color.WHITE);
        //g.fillRect(0, 0,830,575);
        g.fillRect(0, 0,getWidth(),getHeight()); //no more hardcoded size
        clearscreen=false;
    }
    g.setColor(Color.BLACK);
    g.fillOval(x,y,10,10);
}

您当然会将组件添加到绘图画布中-遗憾的是,这些代码部分不是您问题的一部分,因此我们只能胡乱猜测…抱歉,我已经上传了新的@MartinFrank,你肯定会在你的绘图画布上添加组件-遗憾的是,这些代码部分不是你问题的一部分,所以我们只能胡乱猜测…对不起,我已经上传了新的@MartinFrank FrankI按照你说的方式做这一部分我认为这与fillrect无关,因为我推荐所有这一切