除非窗口扩展,否则JSlider不会出现

时间:2016-08-08 01:12:09

标签: java jslider

您好我正在使用MVC布局制作游戏,并且无法让JSlider变得可见。它的功能完全正常,但除非窗口扩展,否则不会显示。这是我在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类:`public class SliderView扩展JSlider {

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



}

}`

1 个答案:

答案 0 :(得分:2)

你试图通过设置尺寸来尝试拍摄自己,但最重要的是,在添加JSlider之前,你在JFrame 上调用setVisible(true) - 所以它在下一次重绘(调整大小)之前一直不可见。

  1. 从您的程序中删除所有setSize。而是让组件自己调整大小,
  2. 或覆盖getPreferredSize,但以智能方式允许所有组件完全显示。
  3. 您将滑块添加到BorderLayout.NORTH位置的容器中。请确保此容器实际上使用BorderLayout
  4. 在显示之前,请务必在顶级窗口(JFrame?)上调用pack()
  5. MOST 重要 - 在添加所有组件后,在JFrame 上调用setVisible(true) - 包括JSlider
  6. 您还要在呈现GUI组件之前调用this.getWidth() - 这将返回0的大小 - 测试一下以便自己查看。