3

スライダーの値が変更されたときにJLabelの背景色を変更する「ChangeListener」インターフェースとハンドル「ChangeEvent」を備えたJSlider。私がそれを行うことができなかったのを助けてください。よろしくお願いします。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();
        }
    });
}
}
4

2 に答える 2

6
  1. JLabel透明である場合は、不透明度を変更する必要がありますJLabel.setOpaque(true)

  2. Oracleチュートリアルを読むスライダーの使用方法

于 2012-12-29T20:14:54.930 に答える
0

JLabelは透明で、背景色を直接変更することはできません。

JLabelから拡張して、paintメソッドをオーバーライドできます

またはパネルのbgcolorを変更します。パネルにJLabelを配置し、スライダーが移動したら、そのパネルのbgcolorを変更するだけです。JLabelは透過的であるため、変更が表示されます。

コードに関しては、statechangeメソッド内にこのようなものを追加してみてください

panel.setBackground(new Color(int,int,int));//ints could be slider.getValue();
于 2013-01-01T06:33:11.707 に答える