0
public class LabelResizing2 {

    public static JPanel createSliderPanel(
            int min, int max, int curr)
    {       
        /*outer panel*/
        final JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
        panel.setBorder(BorderFactory.createRaisedBevelBorder());       

        final JLabel valueLabel = new JLabel();
        valueLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 

        /*set up slider*/
        final JSlider slider = new JSlider(JSlider.VERTICAL, min, max, curr);
        slider.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 

        panel.add(valueLabel); 
        panel.add(slider);

        /*slider move event*/
        slider.addChangeListener(new ChangeListener() {

            public void stateChanged(ChangeEvent event) {

                valueLabel.setText(Integer.toString(slider.getValue()));
            }


        });

        valueLabel.setText(Integer.toString(curr));
        return panel; 
    }

    public static void main(String[] args) {
        JFrame gui = new JFrame("Label Resizing");
        gui.setMinimumSize(new Dimension(500, 500));
        gui.add(createSliderPanel(-100, 100, 0)); 
        gui.setVisible(true); 

    }

}

ここでの問題は、ラベルのサイズが '99' から '100' に、'0' から '-1' などに変更されるときに、スライダーがあちこちに移動することです。

いくつかの質問:

  1. なぜそれは跳ね回っていますか?
  2. 入れたら

    valueLabel.setSize(100, 100); それは絶対に何もしません。なんで?

    valueLabel.setMinimumSize(100,100); バウンスを停止しますが、実際にはラベルのサイズを変更しません。なんで?

  3. 私が見つけた最善の解決策は行くことslider.setAlignmentX(Component.LEFT_ALIGNMENT);です これは良い解決策ですか? しかし、これはCENTER_ALIGNMENTまたはには機能しませんRIGHT_ALIGNMENT。ここで何が起こっているのでしょうか?

  4. 少し変更して、valueLabel をパネル内に配置するとします。

:

final JPanel labelPanel = new JPanel(); 
final JLabel valueLabel = new JLabel();
valueLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
labelPanel.add(valueLabel); 
labelPanel.setBorder(BorderFactory.createLineBorder(Color.RED));
panel.add(labelPanel); 
panel.add(slider); 

labelPanel のサイズが変更されていなくても (valueLabel がその中でサイズ変更されています)、スライダーは引き続き動きます。何が起きてる?レイアウト マネージャーはネストされたコンポーネントも参照していますか?

4

1 に答える 1