2

パネルに画像を表示し、画像をズームインおよびズームアウトするスライダーを備えたGUIを設計しています。しかし、問題は次のとおりです。画像がズームされますが、スクロールペイン内の画像が表示されません。

ImagePanel imageP = new ImagePanel("D:/ScannedImage1.jpg");
JSlider slid = (JSlider) evt.getSource();
float value = (float) slid.getValue();
imageP.setScale(value);
imagePanel.add(new JScrollPane(imageP), BorderLayout.CENTER);
imagePanel.validate();

imagePanelクラスのコードpaintComponentメソッド

super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BICUBIC);
int w = getWidth();
int h = getHeight();
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
double x = (w - scale * imageWidth) / 2;
double y = (h - scale * imageHeight) / 2;
AffineTransform at = AffineTransform.getTranslateInstance (x, y);
at.scale(scale, scale);
g2.drawRenderedImage(image, at);
4

2 に答える 2

3

JScrollPaneクライアントの優先サイズに依存するため、ズームされたサイズを反映するgetPreferredSize()方法でのメソッドをオーバーライドする必要がある場合があります。ImagePanel

于 2012-05-22T14:59:07.297 に答える
0

すべきではありません:

imageP.add(new JScrollPane(), BorderLayout.CENTER);
imageP.validate();

そうでない場合で、実際にクラスから直接呼び出そうとしている場合は、次のようにすべきではありません。

ImagePanel.add(new JScrollPane(), BorderLayout.CENTER);
ImagePanel.validate();

また、add()メソッドとvalidate()メソッドは静的である必要があります。そうでない場合は、最初の例を使用する必要があります。

于 2012-05-22T13:23:15.190 に答える