paintComponent总是更新矩形

时间:2015-03-07 09:16:08

标签: java swing paintcomponent rectangles

我在使用矩形

时遇到了一些问题

这里是我的代码:

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);
    }
}

我随机使用坐标和尺寸

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

如何只在第一次制作和协调???

2 个答案:

答案 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);
    }
}