2015-03-07 1 views
0

У меня есть некоторые проблемы, используя прямоугольник
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(); 
    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); 
    } 
} 

я, используя координаты и размер случайной

если я переключаюсь на вкладку, координаты и размер прямоугольника всегда изменяется.

как сделать и координировать только в первый раз ???

+1

Не создавать/изменять состояние краски (х, у) в 'метод paintComponent'. Задайте его как в конструкторе, а просто _use_ в методе 'paintComponent'. –

+0

можете ли вы сделать какой-нибудь пример ??? – newbie

+0

Просто введите поля 'int x, y' в классе панели, а затем инициализируйте их в конструкторе' public panel() {x = .., y = ..} ', затем используйте x и y в методе рисования , Если вы не понимаете поля и конструкторы, я настоятельно рекомендую перейти на основы Java, прежде чем работать с графическими интерфейсами. –

ответ

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

это здорово, очень спасибо. – newbie

2

Начните с обзора Painting in AWT and Swing, чтобы понять, как работает живопись.

В принципе, когда система думает, что ваш компонент нуждается в обновлении, ваш метод paintComponent будет вызван (косвенно), и ожидается, что он отобразит состояние CURRENT этого компонента.

Покраска может происходить по ряду причин, большинство из которых у вас нет контроля.

Вместо того, чтобы вычислять состояние прямоугольника в методе paintComponent, у вас есть способ, которым вы можете управлять самим, что делает это, и иметь способ paintComponent просто сделать картину.