Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JSlider更改JLabel背景色_Java_Swing_Jlabel_Jslider - Fatal编程技术网

Java 如何使用JSlider更改JLabel背景色

Java 如何使用JSlider更改JLabel背景色,java,swing,jlabel,jslider,Java,Swing,Jlabel,Jslider,带有“ChangeListener”界面的JSlider和处理“ChangeEvent”,当滑块值更改时,它将更改JLabel背景颜色。请帮助我,我做不到。 提前谢谢。我不能申请JLabel package org.kodejava.example.swing; import javax.swing.*; import javax.swing.event.ChangeEvent;

带有“ChangeListener”界面的JSlider和处理“ChangeEvent”,当滑块值更改时,它将更改JLabel背景颜色。请帮助我,我做不到。 提前谢谢。我不能申请JLabel

              package org.kodejava.example.swing;
              import javax.swing.*;
               import javax.swing.event.ChangeEvent;
               import javax.swing.event.ChangeListener;
              import java.awt.*;
           public class JSliderDemo extends JPanel implements ChangeListener {
private JTextField field;

public JSliderDemo() {
    initializeUI();
}

private void initializeUI() {
    setLayout(new BorderLayout());
    setPreferredSize(new Dimension(400, 100));

    //
    // Creates an instance of JSlider with a horizontal
    // orientation. Define 0 as the minimal value and
    // 50 as the maximum value. The initial value is set
    // to 10.
    //
    JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 50, 10);

    slider.setPaintTicks(true);
    slider.setPaintLabels(true);
    slider.setMinorTickSpacing(1);
    slider.setMajorTickSpacing(10);

    slider.addChangeListener(this);

    JLabel label = new JLabel("The Value:");
    field = new JTextField(5);

    JPanel panel = new JPanel();
    panel.setLayout(new FlowLayout());
    panel.add(label);
    panel.add(field);

    add(slider, BorderLayout.NORTH);
    add(panel, BorderLayout.SOUTH);
}

public void stateChanged(ChangeEvent e) {
    JSlider slider = (JSlider) e.getSource();

    //
    // Get the selection value of JSlider
    //
    field.setText(String.valueOf(slider.getValue()));
}

public static void showFrame() {
    JPanel panel = new JSliderDemo();
    panel.setOpaque(true);

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Slider Example");
    frame.setContentPane(panel);
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JSliderDemo.showFrame();
        }
    });
}
}
  • JLabel
    是透明的,然后必须更改其不透明度
    JLabel.setOpaque(true)

  • 阅读Oracle教程


  • JLabel是透明的,不能直接更改其背景色

    您可以从JLabel扩展并重写绘制方法

    或更改面板的颜色。 您将JLabel放在面板上,当滑块移动时,只需更改面板的颜色即可。因为JLabel是透明的,所以您将看到更改

    至于代码,请尝试在statechange方法中添加类似的内容

    panel.setBackground(new Color(int,int,int));//ints could be slider.getValue();
    

    我尝试了这个方法,但无法在其中添加JLabel有一个带有ChangeListener的JSlider示例:您只需在ChangeListener stateChanged(..)方法中调用JLabel实例上的setBackground(c色)别忘了,JLabel在默认情况下是透明的,您应该确保在创建它之后调用了JLabel#setOkable。您可能还需要致电JLabel#repaint,以鼓励repaint经理进行更新it@MadProgrammer+1,啊,完全忘记
    JLabel
    是非不透明的。顺便说一句,setBackgound(..)调用
    repaint()
    本身,因此不需要冗余。