簡體   English   中英

Java Swing:JScrollPane 不適用於 JPanel 中的緩沖圖像

[英]Java Swing: JScrollPane doesn't work with Buffered Image in a JPanel

這是我的JFrame class 應該顯示一個高度和寬度為 2000 像素的圖像。 顯示的區域應該只有800pxwidthheight ,我希望能夠使用滾動條到達2000px的rest。 但目前只有 800x800 像素的幀,我無法滾動圖片。 我可以看到滾動條,但我無法滾動它。 如果我將 window 拖得更大,我只能看到更多圖片。

我的代碼現在正在做什么:創建Panel class 的實例panel ,它顯示高度:2000 像素和寬度:2000 像素的圖像。 然后我創建一個JScrollPane並傳遞panel實例。

如果我不使用setHorizontalScrollBarPolicysetVerticalScrollBarPolicy行,我什至看不到滾動條。 如果我使用這兩行,我會看到一個用於水平和垂直滾動的滾動條,但我無法使用它們,因為看起來圖片已最大化。

這是我的框架 class:

public class Frame extends JFrame {


    public Frame() {

        Panel panel = new Panel();
       
        JScrollPane scrollPane = new JScrollPane(panel);

        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);


        add(scrollPane);
       
        this.getContentPane().setPreferredSize(new Dimension(800, 800));
        panel.generateImage();
        setVisible(true);

        pack();
    }

這是生成圖像的 class

public class Panel extends JPanel {

   
    private BufferedImage img;

    public Panel() {
     
        img= new BufferedImage(2000, 2000, BufferedImage.TYPE_INT_RGB);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawImage(img, 0, 0, null);
    }

public void generateImage () {

       //...image gets generated here
        repaint();
    }
}

這是一個例子,它現在的樣子。 這只狗只是一個例子,但它希望能讓我的問題更清楚-> 我想滾動瀏覽圖像,這樣我就可以看到狗的其他部分。

在此處輸入圖像描述

您可能忘記了面板的首選尺寸,因為這是用於擴展 JScrollPane 的視口中保存的 JPanel“視圖”的尺寸。 考慮通過執行以下操作來覆蓋繪圖 JPanel 中的 getPreferredSize:

@Override
public Dimension getPreferredSize() {
    if (img == null) {
        return super.getPreferredSize();
    } else {
        int w = img.getWidth();
        int h = img.getHeight();
        return new Dimension(w, h);
    }
}

當然必須導入java.awt.Dimension

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM