使用Java中的Scrollbar更改颜色

时间:2013-03-28 00:10:49

标签: java scrollbar adjustment

我想根据3滚动条中选择的值更改帧的背景颜色? 但这里没有发生的是我的代码。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class changeColor extends JFrame implements AdjustmentListener
{
    JScrollBar red;
    JScrollBar green;
    JScrollBar blue;


    changeColor()
    {
        super("SCROLLBAR DEMO");
        setLayout(new FlowLayout());
        setVisible(true);
        setSize(300,300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        red=new JScrollBar(JScrollBar.HORIZONTAL);
        green=new JScrollBar(JScrollBar.HORIZONTAL);
        blue=new JScrollBar(JScrollBar.HORIZONTAL);
        add(red);
        add(green);
        add(blue);
        red.addAdjustmentListener(this);
        green.addAdjustmentListener(this);
        blue.addAdjustmentListener(this);   
    }

    public void adjustmentValueChanged(AdjustmentEvent ae)
    {
        int cr=0;
        int cg=0;
        int cb=0;
        if(ae.getSource()==red)
            cr=ae.getValue();
        else if(ae.getSource()==green)
            cg=ae.getValue();
        else if(ae.getSource()==blue)
            cb=ae.getValue();

        setBackground(new Color(cr,cg,cb)); 
    }


    public static void main(String args[])
    {
        changeColor obj=new changeColor();  
    }
}

问题是背景颜色没有变化。 我想知道问题是什么,我该如何解决?

2 个答案:

答案 0 :(得分:1)

这是一个很好的解决方案。首先,您使用JFramesetDefaultCloseOperation()setBounds()等常规方法创建 getContentPane() 。然后从类中创建一个对象,然后使用它来调用程序中的所有其他方法,在这种情况下,我创建了一个名为app的对象。您必须记住的一件事是不要忘记使用AdjustmentEvent e代替ActionListener e :)。

同样,所有颜色更改都必须与panel.setBackground(new Color(sbar1.getValue(),sbar2.getValue(), sbar3.getValue()中的AdjustmentEvent一致,因为Scrollbar更改后,getValue()方法会获得它的值并使用new Color()方法添加到setBackground()方法。

    import javax.swing.*;  
    import java.awt.event.*;
    import java.awt.*;

    public class Main implements AdjustmentListener {

        private static void createAndShowGUI() {
            // make frame..
          JFrame frame = new JFrame("JScrollBar");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setBounds(20,30,200,250);
          frame.getContentPane().setLayout(null);
          Main app = new Main();
          app.sbar1 = new JScrollBar(java.awt.Adjustable.VERTICAL, 127, 1,0,255);
          app.sbar1.setBounds(10,20, 10, 200);
          app.sbar1.setBackground(Color.red);
          app.sbar1.addAdjustmentListener(app);
          frame.getContentPane().add(app.sbar1);
          app.sbar2 = new JScrollBar(java.awt.Adjustable.VERTICAL, 127, 1,0,255);
          app.sbar2.setBounds(30,20, 10, 200);
          app.sbar2.setBackground(Color.green);
          app.sbar2.addAdjustmentListener(app);
          frame.getContentPane().add(app.sbar2);
          app.sbar3 = new JScrollBar(java.awt.Adjustable.VERTICAL, 127, 1,0,255);
          app.sbar3.setBounds(50,20, 10, 200);
          app.sbar3.setBackground(Color.blue);
          app.sbar3.addAdjustmentListener(app);
          frame.getContentPane().add(app.sbar3);

          app.panel = new JPanel();
          app.panel.setBounds(80,20,50,200);
          app.panel.setBackground(new Color(0,0,0));
          frame.getContentPane().add(app.panel);

          frame.setVisible(true); 
      }

      public void adjustmentValueChanged(AdjustmentEvent e)
      {
          panel.setBackground(new Color(sbar1.getValue(),sbar2.getValue(), sbar3.getValue()));
      }

      public static void main(String[] args) {
        // start off..
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
      }

      // application object fields    
      JScrollBar sbar1;
      JScrollBar sbar2;
      JScrollBar sbar3;
      JPanel panel;
}

我希望这对你有所帮助。!!!

答案 1 :(得分:0)

我在发布时运行了你的代码并且它有点工作,背景颜色确实发生了变化。

问题1:cr,cg和cb需要是类变量。通过这种方式,您选择的颜色将混合在一起。它的编写方式,一次只能改变一种颜色。

问题2:要获得全范围的颜色,您需要更改您的选择,使范围从0到255.使用JScrollBar方法,我只能看到0到90之间的值。这可能很容易通过转移到JSlider来修复

问题3:您必须在JFrame的内容窗格上设置颜色。 (见评论)

注释:Java约定是使用大写字母FYI命名类。

以下是可能提供您正在寻找的结果的更改:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class changeColor extends JFrame implements AdjustmentListener
{
    JScrollBar red;
    JScrollBar green;
    JScrollBar blue;
    int cr=0;
    int cg=0;
    int cb=0;


    changeColor()
    {
        super("SCROLLBAR DEMO");
        setLayout(new FlowLayout());
        setVisible(true);
        setSize(300,300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        red=new JScrollBar(JScrollBar.HORIZONTAL);
        green=new JScrollBar(JScrollBar.HORIZONTAL);
        blue=new JScrollBar(JScrollBar.HORIZONTAL);
        add(red);
        add(green);
        add(blue);
        red.addAdjustmentListener(this);
        green.addAdjustmentListener(this);
        blue.addAdjustmentListener(this);   
    }

    public void adjustmentValueChanged(AdjustmentEvent ae)
    {

        if(ae.getSource()==red)
            cr=ae.getValue();
        else if(ae.getSource()==green)
            cg=ae.getValue();
        else if(ae.getSource()==blue)
            cb=ae.getValue();
        System.out.println(cr + ":" + cg + ":" + cb);

        // add color to content pane
        this.getContentPane().setBackground(new Color(cr,cg,cb)); 
    }


    public static void main(String args[])
    {
        changeColor obj=new changeColor();  
    }
}