Pokrótce zadam pytanie. Dlaczego nie zmieniają się kolor panelu bądź nie dodają się buttony skoro za pomocą tego kodu gdy przesuwam suwakiem jest wywoływana funkcja stateChanged
. Choć funkcja paintComponent
nie jest wywoływana za pomocą slidera
class PanelGlowny extends JPanel{
/**
*
*/
private static final long serialVersionUID = 1L;
public PanelGlowny(){
setBackground(Color.BLACK);
setLayout(null);
setBounds(0, 0, 800, 600);
PanelKoloru panelKoloru = new PanelKoloru();
panelKoloru.setBounds(0, 100, 800, 500);
panelKoloru.setBackground(Color.WHITE);
PanelSuwaka panelSuwaka = new PanelSuwaka();
panelSuwaka.setBounds(0, 0, 800, 100);
this.add(panelKoloru);
this.add(panelSuwaka);
}
}
class PanelSuwaka extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
public PanelSuwaka(){
setBackground(Color.RED);
JSlider suwakTest=new JSlider(0,255,100);
ChangeListener panelKoloru = new PanelKoloru();
suwakTest.addChangeListener(panelKoloru);
add(suwakTest);
}
}
class PanelKoloru extends JPanel implements ChangeListener{
public PanelKoloru(){
setBorder(BorderFactory.createBevelBorder(1));
}
public void stateChanged(ChangeEvent e) {
System.out.println("Zmiana wykonana");
JButton but=new JButton();
add(but);
repaint();
revalidate();
}
public void paintComponent(Graphics g){
super.paintComponents(g);
setBackground(Color.PINK);
System.out.println("Zmiana w paintComponent");
}
private static final long serialVersionUID = 1L;
}
oczywiście mam świadomość że istnieje działające rozwiązanie typu, ale mnie intryguje sama istota problemu
class Ramka extends JFrame
{
public Ramka(){
setLocation(new Point(250, 100));
setSize(800, 600);
this.setResizable(false);
PanelGlowny panel = new PanelGlowny();
Container contentPane = getContentPane();
contentPane.add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class PanelGlowny extends JPanel {
private static final long serialVersionUID = 1L;
public PanelGlowny(){
setBackground(Color.BLACK);
setLayout(null);
setBounds(0, 0, 800, 600);
JPanel panelSuwaka = new JPanel();
panelSuwaka.setBounds(0, 0, 800, 100);
this.add(panelSuwaka);
JSlider suwakTest=new JSlider(0,255,100);
suwakTest.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
i++;
setBackground(new Color(i,i,i)) ;
System.out.println("Zmiana" + i);
}
});
panelSuwaka.add(suwakTest);
add(panelSuwaka);
repaint();
}
private static int i=0;
}