2

javaでjPanelとjFrameを使用して画像をスクロール可能にしようとしています。drawQuestion クラスで画像を描画してから、drawQuestion を jScrollPanel に追加しましたが、スクロールしません。エラーの場所を教えてください。何日も探し続けていますが、まだ見つかりません。私の悪い英語でごめんなさい。

main.java:

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class main{

private static int width = 800;
private static int height = 450;

public static void main(String[] args){
    JFrame window = new JFrame("DPA Physics 2013 9 class");
    drawQuestion question = new drawQuestion();
    JScrollPane scroll = new JScrollPane(question);
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(width,height);
    window.setLocationRelativeTo(null);

    window.add(scroll);

    window.setVisible(true);
}
}

drawQuestion.java:

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class drawQuestion extends JPanel{
private static final long serialVersionUID = 1L;

public void paintComponent(Graphics g){ 
    super.paintComponent(g);

    Image image1 = new ImageIcon(this.getClass().getResource("Page1.png")).getImage();

    g.drawImage(image1,0,0,this);
}
}
4

1 に答える 1

4

パネルの (推奨) サイズが指定されていませんdrawQuestion。つまり、すべてのレイアウトでサイズが 0x0 であると見なされるようになりました。

メソッド内で完了するのに少しでも時間がかかる可能性のあるタスクをロードしたり実行したりしないでくださいpaint...

getPreferredSizeパネルの必要なサイズを返すには、メソッドをオーバーライドする必要があります。これにより、スクロール ペインは、パネルのスクロールが必要かどうかを判断できます...

public class DrawQuestion extends JPanel{
    private static final long serialVersionUID = 1L;

    private Image image1;
    public DrawQuestion() {
        image1 = new ImageIcon(this.getClass().getResource("Page1.png")).getImage();
    }

    public Dimension getPreferredSize() {
        return image1 == null ? super.getPreferredSize() : new Dimension(image1.getWidth(this), image1.getHeight(this));
    }

    public void paintComponent(Graphics g){ 
        super.paintComponent(g);

        if (image1 != null) {
            g.drawImage(image1,0,0,this);
        }
    }
}

私が壁にいる間...画像を読み込めない場合は例外をスローすることもお勧めImageIOします...ImageIconImageIO

于 2013-04-27T06:59:37.677 に答える