【发布时间】:2015-02-26 23:15:39
【问题描述】:
我正在为我的一个项目制作关卡编辑器,因此我将 JPanel 添加到 JScrollPane 以查看正在处理的关卡。这个想法是,如果级别太大,滚动窗格会处理这个问题。问题是当级别太小时,当我尝试将面板调整为小于滚动窗格的大小时,它会被拉伸以填充整个滚动窗格,而不是我设置的大小。我似乎找不到问题的解决方案。
编辑:我添加了一些示例代码,当窗口放大时,面板会拉伸以适应滚动窗格,而不是在示例中停留在 500 x 500 的集合。
设置 JScrollPane:
public class Example {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
LevelView levelView = new LevelView();
JScrollPane pane = new JScrollPane(levelView);
frame.add(pane, BorderLayout.CENTER);
frame.setVisible(true);
}
}
JPanel:
public class LevelView extends JPanel {
private static final long serialVersionUID = 1L;
public LevelView() {
Dimension dim = new Dimension(500, 500);
setPreferredSize(dim);
setMaximumSize(dim);
setMinimumSize(dim);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println(getWidth() + " " + getHeight());
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
// Draw grid
g.setColor(Color.WHITE);
for (int x = 0; x < getWidth(); x += 50) {
g.drawLine(x, 0, x, getHeight());
}
for (int y = 0; y < getHeight(); y += 50) {
g.drawLine(0, y, getWidth(), y);
}
}
}
提前致谢!
【问题讨论】:
-
第一:Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?;第二:考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将减少混乱并获得更好的响应
-
感谢您的建议,我已经更新了一些更多信息。不硬编码像素大小绝对是更好的做法,但我没有看到更好的方法。
标签: java swing jpanel jscrollpane