除非展开 window,否则 JSlider 不会出现

JSlider won't show up unless the window is expanded

你好,我正在使用 MVC 布局制作游戏,但无法让 JSlider 可见。它的功能齐全,但除非 window 展开,否则不会显示。这是我在 GameView 中创建 JSlider 的方法: `public void startView() {

    playerXPosition = 5; // Initializing the X position
    playerYPosition = 80; // Initializing the Y position
    score = 0;
    tds = 0;
    level = 1;
    lives = 3;

    MyPanel drawingWindow = new MyPanel();
    drawingWindow.setSize(800, 500);
    drawingWindow.setVisible(true);
    this.add(drawingWindow);

    SliderView jSlider = new SliderView();
    jSlider.setSize(this.getWidth() / 4, 50);
    jSlider.setAlignmentX((this.getWidth() / 2) - (this.getWidth() / 2));


    jSlider.addChangeListener(new ChangeListener() {

        @Override
        public void stateChanged(ChangeEvent e) {
            int tacklerspeed = jSlider.getValue();
            getGameController().updateRatio(tacklerspeed);

            System.out.println("Speed changed ");
            System.out.println(tacklerspeed);

        }
    });

    this.setSize(800, 700);
    this.setVisible(true);
    this.add(jSlider, BorderLayout.NORTH);

    drawingWindow.setFocusable(true);
}`

这是我的 SliderView class:`public class SliderView extends JSlider {

public SliderView() {
    this.setEnabled(true);
    this.setPaintTicks(true);
    this.setMaximum(2);
    this.setVisible(true);
    this.setFocusable(false);
    this.setValue(1);
    this.setSnapToTicks(true);



}

}`

您尝试设置事物的大小似乎是搬起石头砸自己的脚,但最重要的是,您在 之前 在 JFrame 上调用 setVisible(true)添加 JSlider - 因此在下一次重绘(调整大小)之前它一直不可见。

  1. 从您的程序中删除所有 setSize。而是让组件自行调整大小,
  2. 或重写 getPreferredSize,但以允许所有组件完全显示的巧妙方式。
  3. 您正在将滑块添加到其位于 BorderLayout.NORTH 位置的容器中。确保此容器实际上使用的是 BorderLayout.
  4. 在显示它之前,请务必在顶层 window(JFrame?)上调用 pack()
  5. MOST 重要——在 JFrame 添加之后调用 setVisible(true)所有组件——包括 JSlider
  6. 您还调用 this.getWidth() before 呈现您的 GUI 组件——这将 return 大小为 0——测试一下看看为你自己。