我写了JPanel类,我加载了图片。我试图在这个面板上添加一个卷轴,但它没有用。有人能帮我吗?抱歉我的语言不好。
browser.setFileFilter(imgFilter); // ustawienie filtra
browser.setAcceptAllFileFilterUsed(false);
browser.setCurrentDirectory(new File("."));
int result = browser.showOpenDialog(imagePanel);
if (result == JFileChooser.APPROVE_OPTION) {
// tworzenie obrazu
imagePanel = new ImagePanel(browser.getSelectedFile());
JScrollPane scrollPane = new JScrollPane(imagePanel);
scrollPane.setSize(new Dimension(300, 400));
//add(imagePanel);
add(scrollPane);
//imagePanel.repaint();
scrollPane.repaint();
}
这是我的imagePanel类:
private class ImagePanel extends JPanel {
private Image img;
private File file;
public ImagePanel(File file) {
this.file = file;
setSize(SCREEN_HEIGHT / 2, SCREEN_WIDTH * 3/4);
try {
img = ImageIO.read(file);
}
catch(IOException e) {
System.out.println("Wystąpił błąd podczas wczytywanie obrazu.");
e.printStackTrace();
}
}
public void paintComponent(Graphics g) {
if(img == null) return;
g.drawImage(img, 0, 0, null);
}
}
答案 0 :(得分:2)
您应该覆盖getPreferredSize()
的{{1}},为面板指定首选大小,滚动窗格将使用该大小来确定是否添加滚动。通常,在进行自定义绘制时,您总是希望覆盖绘图画布面板的ImagePanel
,因为默认值为0x0
示例:
getPreferredSize
使用getPreferredSize
没有getPreferredSize
<强>更新强>
我认为你当前的代码有问题。
要设置图像时创建新的public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
// image is 256 x 256
Image image = new ImageIcon("stackoverflow.png").getImage();
JPanel imagePanel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(image.getWidth(this),
image.getHeight(this));
}
};
JScrollPane pane = new JScrollPane(imagePanel);
pane.setPreferredSize(new Dimension(200, 200));
JOptionPane.showMessageDialog(null, pane);
}
});
}
}
。相反,只需在ImagePanel
类中使用setImage
方法,您就可以在其中设置图像并进行重新绘制。
在没有ImagePanel
的情况下在运行时尝试add(scrollPane);
。
请参阅此处的完整示例。
revalidate()