我在使用矩形
时遇到了一些问题这里是我的代码:
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);
}
}
我随机使用坐标和尺寸
如果我切换标签,矩形的坐标和大小总是会改变。
如何只在第一次制作和协调???
答案 0 :(得分:2)
首先看看Painting in AWT and Swing,了解绘画是如何运作的。
基本上,当系统认为你的组件需要更新时,你的paintComponent
方法将被(间接)调用,并且它应该呈现组件的CURRENT状态。
绘画可能由于多种原因而发生,其中大多数原因是您无法控制。
不是在paintComponent
方法中计算矩形的状态,而是使用一个可以控制自己的方法来执行此操作并使用paintComponent
方法进行绘制。
答案 1 :(得分:0)
这里:
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);
}
}