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