2017-01-02 58 views
1

我正在創建電路編輯器(類似於任何具有基本菜單和具有可指定尺寸的畫布的常規繪畫軟件)。我目前正試圖將以前不可滾動的畫布(JPanel)轉換爲可滾動畫布。在JFrame中居中固定大小的畫布

Circuit Editor

此刻的明顯的設計錯誤是,當滾動條看上去以正確反映畫布的內部尺寸(這當然可以比JFrame方式更大),由於帆布JPanel感在主面板的BorderLayoutCENTER中增加,它總是隨着JFrame一起調整大小。

public final class MainFrame extends JFrame 
{ 
    public MainFrame() 
    {    
     JPanel menuPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
     // Populate Menu Panel 
     // ... 

     JPanel canvasPanel = new JPanel(); 
     canvasPanel.setBackground(Color.white); 
     Dimension canvasDims = new Dimension(800,600);   
     canvasPanel.setPreferredSize(canvasDims); 
     canvasPanel.setMinimumSize(canvasDims); 
     canvasPanel.setMaximumSize(canvasDims); 

     JScrollPane canvasScrollPane = new JScrollPane(
      canvasPanel, 
      JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
      JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

     JPanel masterPanel = new JPanel(new BorderLayout()); 
     masterPanel.add(menuPanel, BorderLayout.NORTH); 
     masterPanel.add(canvasScrollPane, BorderLayout.CENTER); 

     setContentPane(masterPanel); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(1200, 700); 
     setMinimumSize(new Dimension(500, 500)); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

我讀過關於中心JPanels和滾動條相當多的職位,但既複雜性加在一起,因爲我還沒有找到一個解決辦法的事情可能會有點複雜。

我真正想要實現的是將畫布「JPanel」固定爲用戶可能指定並居中在中間的任意大小,以及滾動條的行爲與人們期望的那樣:

enter image description here

你怎麼會去這樣做/固定我的設計?任何幫助將不勝感激!

P.S.新年快樂:)

回答

1

的JPanel固定在任何大小的用戶可能已經指定,並在中間,以及表現爲滾動條中心的人們所期望的

所以,你需要嵌套面板使畫布面板可以按其首選大小顯示,而父面板則根據框架大小調整大小。

一個簡單的方法就是使用GridBagLayoutJPanel。然後,使用默認的GridBagConstraints將畫布面板添加到此面板。

所以面板的基本結構是:

JPanel canvas = new JPanel(); 
canvas.setPreferredSize(new Dimension(300, 300)); 
canvas.setBackground(Color.RED); 

JPanel wrapper = new JPanel(new GridBagLayout()); 
wrapper.add(canvas, new GridBagConstraints()); 

frame.add(new JScrollPane(wrapper)); 

注:沒有必要爲您的「masterPanel」。 JFrame的內容窗格的默認佈局管理器是BorderLayout,因此您只需將「menuPanel」和「scrollPane」直接添加到具有適當的BorderLayout約束的框架。

+0

工作很好!非常感謝! –