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”等,滑块会到处移动。
几个问题:
- 为什么会四处弹跳?
如果我投入
valueLabel.setSize(100, 100);
它完全没有任何作用。为什么?valueLabel.setMinimumSize(100,100);
会阻止它弹跳,但实际上不会调整标签的大小。为什么?我发现的最佳解决方案是去
slider.setAlignmentX(Component.LEFT_ALIGNMENT);
这是一个好的解决方案吗?CENTER_ALIGNMENT
但是,这对or不起作用RIGHT_ALIGNMENT
,这是怎么回事?如果我们稍微修改一下并将 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 在其中调整大小),滑块仍会四处移动。这里发生了什么?布局管理器是否也在查看嵌套组件?