Перекрасить в накладные панели

У меня есть JFrame, одна главная JPanel, и только в левой половине JFrame, вторая JPanel. Когда я нажимаю кнопку JButton в основной JPanel, вторая JPanel становится видимой.

Я собираюсь создать paintComponent в основном классе JPanel, нарисовать изображение, один круг и все работы.

Проблема возникает, когда я иду, чтобы изменить цвет этого круга. Я меняю RGB каждый раз, когда я перекрашиваюсь (); Цвет круга изменится, но если я нажму на кнопку JButton в основной JPanel, чтобы открыть вторую JPanel, я немного ее увижу, и она станет невидимой.

Я полагаю, потому что он перерисовывает основной JPanel выше второго..

Как я могу решить эту проблему? Спасибо вам!.

PS я использую super.paintComponent(g); и в конструкторе JPanel я делаю this.repaint(), чтобы немедленно вызвать компоненты первой страницы, в противном случае я должен свернуть окно и снова появиться.

//Panel extends JPanel
//at the end of Constructor
this.repaint();

}


   @Override
 protected void paintComponent(Graphics g){

   super.paintComponent(g);

   setOpaque(true);
   g.drawImage(img, 210, 50, 580,580,this);

   g.setColor(Color.black);
   g.drawOval(480,40,40,40);
   g.fillOval(480,40,40,40);  //Various..

  repaint(); //With this i can't saw the second JPanel that it's overlapped
}            //whit the main JPanel

Алессандро Амедей, Флоренция.

27-01-2015 Это мой код..

ОСНОВНАЯ ПАНЕЛЬ

       package a;



 import java.awt.Color;
 import java.awt.Graphics;
 import java.awt.Image;
  import java.awt.Toolkit;


   import javax.swing.JPanel;



 // @author Alessandro Amedei

 public class FirstPanel extends JPanel{
Image img = null;
FirstPanel(){

    LotL LotL = new LotL();  
    FPListener FPL = new FPListener();
this.setVisible(true);
this.setSize(1000,1000);
this.setLayout(null);
this.setBackground(Color.white); 
this.addMouseListener(FPL);
Main.f1.add(this);

Button start = new Button("Start Game!");


Button options = new Button("Options");




start.setVisible(true);
start.setSize(200,80);
start.setLayout(null);
start.setLocation(400,650);
start.addActionListener(LotL); 
start.setBackground(Color.green);
start.identificatore=1;
this.add(start);

options.setVisible(true);
options.setSize(200,70);
options.setLayout(null);
options.setLocation(400,750);
options.addActionListener(LotL); 
options.setBackground(Color.green);
options.identificatore=2;
this.add(options);


 img= Toolkit.getDefaultToolkit().getImage("ok.jpg");

this.repaint();

}

int B=30;
int R=80;
int G=90;
   @Override
   protected void paintComponent(Graphics g){



   super.paintComponent(g);

   setOpaque(true);
   g.drawImage(img, 210, 65, 580,580,this);

   g.setColor(new Color(R,G,B));
   g.drawOval(455,20,90,90);
   g.fillOval(455,20,90,90);
   if(B==150)
   B=0;     
   if(R==170)
       R=0;
   if(G==160)
       G=0;




    try {  
        Thread.sleep(5);
    } catch (InterruptedException ex) {

    }






   B++;
   R++;
     G++;
   repaint();

   }


    }       

ВТОРАЯ ПАНЕЛЬ

package a;



 import java.awt.Color;

  import java.awt.Font;
  import java.awt.Graphics;



 import javax.swing.JPanel;
   import javax.swing.JSlider;
     import javax.swing.JSpinner;

  import javax.swing.JLabel;
   import javax.swing.JTextField;
   import javax.swing.SpinnerNumberModel;



   //@author Alessandro Amedei


 public class OptionsPanel extends JPanel {


 static JSlider rgb1 = new JSlider(0,255);
 static JSlider rgb2 = new JSlider(0,255);
  static JSlider rgb3 = new JSlider(0,255);
 static SpinnerNumberModel noba = new SpinnerNumberModel();

 static JTextField fg1 = new JTextField();
 static JTextField fg2 = new JTextField();

     OptionsPanel(){



    this.setVisible(false);
   this.setSize(350,1000);
   this.setLayout(null);
     this.setBackground(new Color(255,150,0));

  Main.f1.add(this); 

  JSpinner nob = new JSpinner(noba);
  JLabel l1= new JLabel("Options");    
  JLabel l2= new JLabel("Background Color");
  JLabel g1= new JLabel("Left Button Color");
  JLabel g2= new JLabel("Right Button Color");  
  JLabel nob1 = new JLabel("Number of Checkers for Player");
  JLabel ng1= new JLabel("Name of Left Player");
  JLabel ng2= new JLabel("Name of Right Player");




 rgb1.setVisible(true);        
 rgb1.setSize(240,40);
 rgb1.setLocation(55,90);
 this.add(rgb1);
 rgb1.setBackground(new Color(rgb1.getValue(),255,0));
rgb1.addChangeListener(new SListener());


 rgb2.setVisible(true);
 rgb2.setSize(240,40);
 rgb2.setLocation(55,180);
 this.add(rgb2);
 rgb2.setBackground(new Color(255,0,rgb1.getValue()));
rgb2.addChangeListener(new SListener());


rgb3.setVisible(true);
 rgb3.setSize(240,40);
 rgb3.setLocation(55,270);
 this.add(rgb3);
 rgb3.setBackground(new Color(0,rgb1.getValue(),255));
rgb3.addChangeListener(new SListener());


nob.setVisible(true);
nob.setSize(60,30);
nob.setLocation(55,360);
noba.setMaximum(10);
noba.setMinimum(3);
noba.setValue(3);
this.add(nob);

fg1.setVisible(true);
fg1.setSize(150,30);
fg1.setLocation(55,450);
this.add(fg1);

fg2.setVisible(true);
fg2.setSize(150,30);
fg2.setLocation(55,540);
this.add(fg2);




Font f= new Font("arial",Font.ITALIC,20);
Font f2= new Font("arial",Font.BOLD,13);

l1.setVisible(true);       //Etichetta OPTIONS
l1.setSize(70,20);
l1.setLocation(140,10);
l1.setFont(f);
this.add(l1);


l2.setVisible(true);
l2.setSize(120,30);
l2.setLocation(55,65);
l2.setFont(f2);
this.add(l2);

g1.setVisible(true);
g1.setSize(150,30);
g1.setLocation(55,155);
g1.setFont(f2);
this.add(g1);

g2.setVisible(true);
g2.setSize(150,30);
g2.setLocation(55,245);
g2.setFont(f2);
this.add(g2);

nob1.setVisible(true);
nob1.setSize(200,30);
nob1.setLocation(55,335);
nob1.setFont(f2);
this.add(nob1);

ng1.setVisible(true);
ng1.setSize(200,30);
ng1.setLocation(55,425);
ng1.setFont(f2);
this.add(ng1);

ng2.setVisible(true);
ng2.setSize(200,30);
ng2.setLocation(55,515);
ng2.setFont(f2);
this.add(ng2);


}


   public void paintComponent(Graphics g){
        super.paintComponent(g);


   }

Итак, если я изменю цвет круга в основной JPanel, используя repaint(); Я не могу показать панель параметров, я думаю, из-за обновления, вызванного методом repaint () Main JPanel. Как я могу изменить цвет круга в главной JPanel и одновременно визуализировать панель параметров? (исключая создание другой панели, где я рисую круг). Извините за мой плохой английский! Большое вам спасибо. Алессандро Амедей, Флоренция.

0 ответов

Другие вопросы по тегам