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);
}
}
我在使用矩形时遇到一些问题
这是我的代码:
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);
}
}