我想根据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();
}
}
问题是背景颜色没有变化。 我想知道问题是什么,我该如何解决?
答案 0 :(得分:1)
这是一个很好的解决方案。首先,您使用JFrame
,setDefaultCloseOperation()
,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();
}
}