2016-08-23 42 views
2

在我的應用程序中,我有一個JFrame顯示JSplitPane,分割爲VERTICAL_SPLIT。頂部顯示一個JLabel,底部顯示一個JInternalFrame。發生兩個問題。JSplitPane沒有繪畫修正

  1. JLabel被顯示,但JInternalFrame不是。

    2.我在所有

我相信這是首尾相連的不正確使用的JSplitPane來調整應用程序有JSplitPane顯示。但是,我一直無法解決什麼問題。我可以幫助解決這個問題嗎?

p.s.我已經運行測試以確保GUIWindow.getInsideFrame()未返回null。最後的instanceof檢查表示該窗格中的兩個組件都存在且屬於該類型。非常感謝您對您的幫助:

protected static void newWindow(GUIFrame window) { 
     SwingUtilities.invokeLater(new Runnable(){ 

      @Override 
      public void run() { 
       JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
       JInternalFrame intFrame = window.getInsideFrame(); 
       pane.setRightComponent(intFrame); 
       pane.setLeftComponent(new JLabel(window.getDescription())); 
       synchronized(lock){ 
        frame.remove(currentPane); 
        frame.add(pane); 
       } 
       synchronized(lock){ 
        frame.revalidate(); 
        pane.setVisible(true); 
        frame.repaint(); 
        if(window instanceof ColourFrameShower) return; 
        currentWindow = window; 
        currentPane = pane; 
        currentFrame = intFrame; 
       } 
       if(pane.getLeftComponent() instanceof JLabel) System.out.println("JLabel exists!"); 
       else System.out.println("JLabel does not exist!"); 

       if(pane.getRightComponent() instanceof JInternalFrame) System.out.println("JInternalFrame exists!"); 
       else System.out.println("JInternalFrame does not exist!"); 
      } 

     }); 
    } 

編輯:我固定的問題2在第二synchronised(lock)塊的開始frame.revalidate()通話。這已包含在代碼中。

+0

謝謝 – JD9999

+0

你試圖顯示只有你的JInternalFrame編輯:),沒有JSplitPanel?它工作嗎? :) – Kapcash

+0

是的,沒有JSplitPanel它正在工作。在我的github上查看整個應用程序的最新版本:https://github.com/JD9999/GUI-of-everything – JD9999

回答

1

正如我在評論中告訴您的,您只需在JInternalFrame上使用setVisible(true),否則它將不會被您的JSplitPane考慮。

這是java swing上真正常見的錯誤!

我很高興它幫助你;)

0

嘗試設置resizeWeight:pane.setResizeWeight(0.5);

+0

這對我無能爲力,但感謝您的快速響應! :) – JD9999