Zmiana wyglądu komponentów za pomocą JSlider

0

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

W zamieszczonym kodzie sa dwie różne klasy PanelGlowny. Z której korzystasz?

1 użytkowników online, w tym zalogowanych: 0, gości: 1