[英]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.