2013-01-07 151 views
0

我試了2個小時,用滾動條製作JEditorPane,我即將放棄!爲什麼我的框架是空的?

這是我的代碼部分:

JEditorPane editorPane = new JEditorPane(); 
    URL helpURL = GUIMain.class 
      .getResource("/resources/einleitungstext1.html"); 
    this.setLayout(new GridBagLayout()); 
    GridBagConstraints c = new GridBagConstraints(); 
    try { 
     editorPane.setPage(helpURL); 
    } catch (IOException e) { 
     System.err.println("Attempted to read a bad URL: " + helpURL); 
    } 
    editorPane.setEditable(false); 
    JScrollPane editorScrollPane = new JScrollPane(editorPane); 
    editorScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
    editorScrollPane.setMinimumSize(new Dimension(100, 100)); 
    editorScrollPane.setPreferredSize(new Dimension(main.screenWidth-200, main.screenHeight-200)); 
    c.gridx = 0; 
    c.gridy = 0; 
    this.add(editorScrollPane, c); 
    this.setVisible(true); 

當我做this.add(editorScrollPane,c)該幀是空的,但是當我做this.add(editorPane,c)該面板是表示。即使使用this.add(新的JLabel(「測試」),c)框架是空的。

我的錯誤在哪裏?

謝謝

P.S.我不能發佈整個代碼,因爲它很大。

+0

這是什麼課程?它是從哪裏繼承的? – matts

回答

3
  1. 編輯窗格在後臺加載它的內容,這可能意味着由當時的容器已經擺出來,內容尚未加載
  2. 佈局管理器使用的是和您提供的約束意味着它將使用滾動窗格的首選大小,這可能不足以滿足內容需求(這是滾動窗格的功能,這是它設計的方式)。

要麼供應限制到GridBagLayout鼓勵使用更多的可用空間或佈局管理器的,不依賴於部件的最佳尺寸(如BorderLayout

enter image description here

public class TestLayout18 { 

    public static void main(String[] args) { 
     new TestLayout18(); 
    } 

    public TestLayout18() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 

       JEditorPane editorPane = new JEditorPane(); 
       try { 
        editorPane.setPage(new URL("http://docs.oracle.com/javase/6/docs/api/javax/swing/JScrollPane.html")); 
       } catch (IOException e) { 
        System.err.println("Attempted to read a bad URL"); 
       } 
       editorPane.setEditable(false); 
       JScrollPane editorScrollPane = new JScrollPane(editorPane); 
       frame.add(editorScrollPane); 

       frame.setSize(400, 400); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

非常感謝! – iliketocodeandstuff

0

在editorPane上設置首選大小。 scrollPane正在尋找它的視口大小。您也可以在框架上設置最小尺寸。

+0

當我在editorPane上設置首選大小時,沒有任何變化。無論如何,框架是最大化的。你有其他想法嗎? – iliketocodeandstuff

+0

以及爲什麼甚至沒有簡單的JLabel工作? – iliketocodeandstuff

+0

視口通常不會關心其內容的首選大小,而是使用「可滾動」界面提供的信息(如果可用)。如果你真的想遵循這一思路,你最好創建一個自定義版本的編輯器來實現'Scrollable'接口,並從'Scrollable#getPreferredScrollableViewportSize'返回一個適當的值 - 但是當一些調整或不同的佈局經理會解決問題 – MadProgrammer

相關問題