我创建了ImageComponent类来显示图像,但是当我从其他类调用它时,scrollPanel不显示拇指,因此我不能上下滚动,不能左或右滚动。它在JButton,JTextField上运行得很好。那么,我猜我的ImageComponent类的问题是什么?
class ImageComponent extends JComponent {
/**
*
*/
private static final long serialVersionUID = 1L;
private Image image;
public ImageComponent() {
try {
image = ImageIO.read(new File(
"/Users/Martynas/Downloads/photos/dscf1533.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
// paint image
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
}
}这是我初始化和调用ImageComponent类的类:
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Component component = new ImageComponent();
JScrollPane scrollPanel = new JScrollPane(component, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.add(scrollPanel);
}发布于 2014-06-26 23:45:15
任何组件的默认首选大小总是0x0。滚动窗格将使用此信息来确定如何最好地显示组件,以及是否需要滚动条。
在ImageComponent类中,应该考虑重写getPreferredSize方法
@Override
public Dimension getPreferredSize() {
return image == null ? super.getPreferredSize() : new Dimension(image.getWidth(this), image.getHeight(this));
}此外,您的paintComponent方法从来不需要公开,也不应该有其他人需要调用它。
您还应该将this作为对drawImage的ImageObserver参数的引用.
g.drawImage(image, 0, 0, this);这对于通过其他方式加载的图像来说更重要,然后是ImageIO,但这是一个很好的实践。
说了这些之后,您应该考虑查看一下JLabel,因为它是专为在框内显示图像而设计的。有关更多细节,请查看如何使用标签
https://stackoverflow.com/questions/24441814
复制相似问题