paintComponent 总是更新矩形

paintComponent always update rectangle

我在使用矩形时遇到一些问题

这是我的代码:

import java.awt.*;
import javax.swing.*;
import java.util.*;
public class square
{
    JFrame fr=new JFrame("square");
    Random acak=new Random();
    JScrollPane sc;
    int tinggi,lebar;
    JTabbedPane tab=new JTabbedPane();
    square()
    {   
        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.setLocation(0,0);
        fr.setExtendedState(JFrame.MAXIMIZED_BOTH);
        fr.setLayout(new GridLayout(1,1));
        tab.addTab("Panel1",new panel1());
        tab.addTab("Panel2",new panel2());
        fr.add(tab);    
        fr.show();
    }
    public static void main(String[] args)
    {
        new square();
    }
}
class panel1 extends JPanel
{
    panel1()
    {
    }
    public void paintComponent(Graphics g3)
    {
        int x=(int)(Math.random()*500);
        int y=(int)(Math.random()*500);
        g3.setColor(Color.red);
        g3.fillRect(x,y,100,100);
    }
}
class panel2 extends JPanel
{
    panel2()
    {
    }
    public void paintComponent(Graphics g2)
    {
        int x=(int)(Math.random()*500);
        int y=(int)(Math.random()*500);
        g2.setColor(Color.blue);
        g2.fillRect(x,y,100,100);
    }
}

i随机使用坐标和大小

如果我切换选项卡,矩形的坐标和大小总是会改变。

第一次怎么制作协调???

先看看 Painting in AWT and Swing 以了解绘画的工作原理。

基本上,当系统认为您的组件需要更新时,您的 paintComponent 方法将被调用(间接地)并且它应该呈现组件的当前状态。

绘画的发生可能有多种原因,其中大部分是您无法控制的。

不用在 paintComponent 方法中计算矩形的状态,而是使用一种您可以自己控制的方法来执行此操作,并让 paintComponent 方法简单地进行绘制。

此处:

import java.awt.*;
import javax.swing.*;
import java.util.*;
public class square
{
    JFrame fr=new JFrame("square");
    Random acak=new Random();
    JScrollPane sc;
    int tinggi,lebar;
    JTabbedPane tab=new JTabbedPane();
    gambar()
    {   
        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.setLocation(0,0);
        fr.setExtendedState(JFrame.MAXIMIZED_BOTH);
        fr.setLayout(new GridLayout(1,1));
        tab.addTab("Panel1",new panel1());
        tab.addTab("Gambar",new panel2());
        fr.add(tab);    
        fr.show();
    }
    public static void main(String[] args)
    {
        new square();
    }
}
class panel1 extends JPanel
{
    int x,y;
    panel1()
    {
        x=(int)(Math.random()*500);
        y=(int)(Math.random()*500);
    }
    public void paintComponent(Graphics g3)
    {

        g3.setColor(Color.red);
        g3.fillRect(x,y,x,y);
    }
}
class panel2 extends JPanel
{
    int x,y;
    panel2()
    {
        x=(int)(Math.random()*500);
        y=(int)(Math.random()*500);
    }
    public void paintComponent(Graphics g2)
    {

        g2.setColor(Color.blue);
        g2.fillRect(x,y,x,y);
    }
}