要求设计如下面板拖动滑块可以设置面板的颜色。
我的代码如下
但是我怎么拖动滑块上面的颜色都不改变。
请问我这个程序错在哪里了?该如何改正?
谢谢!package first;import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;public class ColorTest {
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
ColourFrame frame = new ColourFrame();
frame.setTitle("ColorTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
);
}
}class ColourFrame extends DrawFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel displayPanel ;
private JPanel sliderPanel;
private Color color ;
private int val1 ,val2 ,val3 ;
public ColourFrame()
{
setLayout(new BorderLayout());
displayPanel = new JPanel();
add(displayPanel,"Center");
sliderPanel = new JPanel();
sliderPanel.setLayout(new GridLayout(3,2));
JSlider greenSlider = new JSlider(0,255,0);
JSlider blueSlider = new JSlider(0,255,0);
JSlider redSlider = new JSlider(0,255,0);
sliderPanel.add(new JLabel("Red")); sliderPanel.add(redSlider);
sliderPanel.add(new JLabel("Blue")); sliderPanel.add(blueSlider);
sliderPanel.add(new JLabel("Green")); sliderPanel.add(greenSlider);
redSlider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent event)
{
JSlider source = (JSlider) event.getSource();
val1 = source.getValue();
}
});
blueSlider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent event)
{
JSlider source = (JSlider) event.getSource();
val2 = source.getValue();
}
});
greenSlider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent event)
{
JSlider source = (JSlider) event.getSource();
val3 = source.getValue();
}
});
add(sliderPanel,"South");
color = new Color(val1 ,val2 ,val3);
displayPanel.setBackground(color);
}
}
我的代码如下
但是我怎么拖动滑块上面的颜色都不改变。
请问我这个程序错在哪里了?该如何改正?
谢谢!package first;import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;public class ColorTest {
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
ColourFrame frame = new ColourFrame();
frame.setTitle("ColorTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
);
}
}class ColourFrame extends DrawFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel displayPanel ;
private JPanel sliderPanel;
private Color color ;
private int val1 ,val2 ,val3 ;
public ColourFrame()
{
setLayout(new BorderLayout());
displayPanel = new JPanel();
add(displayPanel,"Center");
sliderPanel = new JPanel();
sliderPanel.setLayout(new GridLayout(3,2));
JSlider greenSlider = new JSlider(0,255,0);
JSlider blueSlider = new JSlider(0,255,0);
JSlider redSlider = new JSlider(0,255,0);
sliderPanel.add(new JLabel("Red")); sliderPanel.add(redSlider);
sliderPanel.add(new JLabel("Blue")); sliderPanel.add(blueSlider);
sliderPanel.add(new JLabel("Green")); sliderPanel.add(greenSlider);
redSlider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent event)
{
JSlider source = (JSlider) event.getSource();
val1 = source.getValue();
}
});
blueSlider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent event)
{
JSlider source = (JSlider) event.getSource();
val2 = source.getValue();
}
});
greenSlider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent event)
{
JSlider source = (JSlider) event.getSource();
val3 = source.getValue();
}
});
add(sliderPanel,"South");
color = new Color(val1 ,val2 ,val3);
displayPanel.setBackground(color);
}
}
解决方案 »
- 使用Java Socket实现广域网通信
- 如何获得ResultSet的记录数量啊
- 请教一个层次结构的编程构建方法(本来是树形结构,结果导师要求改成层次结构了)
- JAVA的Socket编程问题,如何发送一个非ASCII码的字节?
- 想朝Java程序员方向发展,我该学些什么?
- jar文件在用IE浏览,在IE端是怎么处理的?求求求求各位了!着急!
- ####用过JBuilder的大侠都知道--关于CLASSPATH的问题--急!急!急!!!
- 请帮我看一下问题出在哪里(小程序)?
- 很急的问题,怎么做两个最简单的APPLET程序。。。。。。。。。。。
- javac 引用jar 的困惑,编译提示找不到class 文件?
- 求 java 核心技术(卷二)电子版????
- MyEclipse 8.5 自动补全问题
redSlider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent event)
{
JSlider source = (JSlider) event.getSource();
val1 = source.getValue();
}
});你监听函数中,只是获取slider的值,没有设置面板的颜色.把下面的加进去,
color = new Color(val1 ,val2 ,val3);
displayPanel.setBackground(color);
如果是你自己写的,你应该知道,设置面板背影就是要
color = new Color(val1 ,val2 ,val3);
displayPanel.setBackground(color);
而你的程序是想用slider获取用户选择的颜色,而获取了颜色当然要再进行设置啊,你不设置,面板如何会改变?
所以,当然要把上面两行代码加入到监听函数中啊
先说我原来的那个程序吧,我是利用 val 来获取了 JSlider 的值,然后想通过 val 来设置颜色,在然后来改变现实面板的颜色。但是因为我的没有把设置颜色和改变面板颜色的那段代码即:color = new Color(val1 ,val2 ,val3);
displayPanel.setBackground(color);添加到监听的函数,而只是在最后添加了这行代码,所以这行不通,改变不了面板的颜色。
所以说我原来的程序就是错在没有把改变面板颜色的代码添加到监听函数中,对吧?之前是不知道所以才到这里来发帖求教的。
难道说这样就有了这段程序不是我写的嫌疑?
我认为这个你不应该不知道的,所以就怀疑这不是你写的,嘿嘿