您好我正在使用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);
}
}`
答案 0 :(得分:2)
你试图通过设置尺寸来尝试拍摄自己,但最重要的是,在添加JSlider之前,你在JFrame 上调用setVisible(true)
- 所以它在下一次重绘(调整大小)之前一直不可见。
BorderLayout.NORTH
位置的容器中。请确保此容器实际上使用BorderLayout
。pack()
。setVisible(true)
- 包括JSlider this.getWidth()
- 这将返回0的大小 - 测试一下以便自己查看。