我有一个带有自定义 LayoutManager 的 JPanel 并尝试将其放入 JScrollPane 中,但是,滚动 Pane 似乎不知道它应该启用滚动。无论我如何设置组件的首选大小(这就是 JScrollPane 的 javadoc 所说的它所需要的),它绝对没有区别。这是代码:
canvas = new JPanel();
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(canvas);
scroll.setPreferredSize(new Dimension(924,700));
canvas.setPreferredSize(new Dimension(2000,2000));
滚动条不出现。 JScrollPane 的容器设置为遵循其首选大小。我已经通过调试器检查了 Canvas 的首选大小确实始终为 2000 x 2000(LayoutManager 确保这一点),那么这里可能发生了什么?
最佳答案
这并不是一个真正的答案,而是一个演示 sscce这再次表明,您的代码对我来说工作得很好:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.RenderingHints;
import javax.swing.*;
public class ScrollBarEg {
protected static final Paint GRADIENT_PAINT = new GradientPaint(0, 0,
Color.blue, 50, 50, Color.red, true);
private static void createAndShowGui() {
JPanel mainPanel = new JPanel();
JPanel canvas = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(GRADIENT_PAINT);
g2.fillOval(0, 0, getWidth(), getHeight());
g2.dispose();
}
};
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(canvas);
scroll.setPreferredSize(new Dimension(924, 700));
canvas.setPreferredSize(new Dimension(2000, 2000));
mainPanel.add(scroll);
JFrame frame = new JFrame("ScrollBar Eg");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
这向我表明您的错误存在于您未发布的代码中的其他位置。
关于java - JScrollPane 不显示滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9421687/