簡體   English   中英

JScrollPane不適用於JPanel繪圖圖形

[英]JScrollPane is not working with JPanel drawing Graphics

我正在研究一個為圖形繪制GUI的項目,似乎JScrollPane的實現不佳,因為當某些節點超出面板范圍時,它不起作用,下面是代碼:

public class Test extends JFrame {
public Test() {
    // TODO Auto-generated constructor stub
    MyPanel panel = new MyPanel();

    JScrollPane scrollPane = new JScrollPane(panel);
    scrollPane
            .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scrollPane
            .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    scrollPane.setBounds(50, 30, 500, 500);

    JPanel contentPane = new JPanel(null);
    contentPane.setPreferredSize(new Dimension(600, 600));
    contentPane.add(scrollPane);

    this.setContentPane(contentPane);
    this.pack();
    this.setSize(600, 600);
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
}
private class MyPanel extends JPanel {
    @Override
    public void paint(Graphics g) {
        // in panel range
        g.fillOval(0, 200, 100, 100);
        // out of panel range needs scroll bar
        g.fillOval(1000, 200, 100, 100);
    }
}

您的JPanel需要通過實現getPreferredSize()來宣傳其大小,就像Swing中的任何其他組件一樣。 JPanel是繪制不透明背景(及其子級)的組件。 您正在實現一個自定義組件(可能沒有子組件),因此需要向其父組件(此處是滾動窗格)提供一些大小調整信息,以確保一切都布置良好。

您也不應該在滾動窗格上設置邊界。 使用LayoutManager自動布局所有內容。 切勿對GUI進行硬編碼。

暫無
暫無

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

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