JSlider Farbe Rechteck verändern



  • Hallo,

    ich soll die RGB-Farbe eines Rechtecks mit einem JSlider verändern. Das funktioniert aber nicht. Die Veränderung der Hingrundfarbe des JPanel dagegen funktioniert ohne Problme, ich dachte man könnte das analog machen, da hab ich wohl getäuscht.. Habe schon alles versucht und kommen einfach nicht weiter. Wie muss ich meinen Code verändern.

    public class Slider extends JFrame {
    
       JSlider slider = new JSlider(JSlider.HORIZONTAL, 0,255,0); 
       JTextField log =new JTextField();
       Rechteck rechteck01 = new Rechteck();
    
       public class Rechteck extends JPanel {
    
             public Rechteck(){ 
                   setBackground(Color.white);
         	}
    
    	public Dimension getMinimumSize(){
    		return new Dimension(100, 100);	
    	}
    
        public Dimension getMaximumSize(){
    		return getMinimumSize();
    	}
    	public Dimension getPreferredSize(){
    		return getMinimumSize();
    	}
    
        public void paint (Graphics g){
    
    	super.paintComponent (g);
    
    	    Graphics2D g2 = (Graphics2D) g;
    	    Rectangle2D.Float rechteck1 = new Rectangle2D.Float(50, 50, 50, 50);
    	    g2.draw(rechteck1);
    	    g2.setPaint(Color.red);
                 g2.fill(rechteck1);
    
    			}}
    
    	public Slider(){
    
    	    super("JSlider");
    	    slider.setMajorTickSpacing(100);
            slider.setMinorTickSpacing(5);
            slider.setPaintTicks(true);
            slider.setPaintLabels(true);
            log.setText("255");
            JPanel panel = new JPanel();
    	 	panel.setLayout(new BorderLayout());	
    		panel.add(slider, BorderLayout.NORTH);
    		panel.add(log, BorderLayout.SOUTH);
    		panel.add(rechteck01, BorderLayout.CENTER);
    		setContentPane(panel);
    
    		slider.addChangeListener(new ChangeListener(){
    			public void stateChanged(ChangeEvent e)
    			{
    				int x = 255;
    				int xy = x-slider.getValue();
    				int red =0;
       	            int green= 0;
       	            int blue = 130;
    		   blue=xy;
    		   rechteck01.setBackground(new Color(red,green,blue));
    
    			}
    		});
    		}
    


  • Maybe hilft das:
    über die Swing-Properties ein eigenes Icon hinzufügen:

    Slider.verticalThumbIcon =javax.swing.plaf.metal.MetalIconFactory$VerticalSliderThumbIcon@2786c3

    Sollte also klappen einfach ein Icon zu erstellen/laden und dieses dann über

    UIManager.getDefaults().put("Slider.verticalThumbIcon", myIcon);
    

    zu setzen.



  • Vielen Dank für die Anwort. Kann mir jemand sagen, wie ich innerhalb meiner Klasse Slider auf die Komponenten in der Methode "public void paint()" zugreifen kann. Ich dachte so etwas in der Art von

    rechteck01.g2.setPaint(Color.red);

    Das funkioniert aber nicht.


Anmelden zum Antworten