2015-05-24 87 views
0

所以我創建了一個JDesktopPane和JInternalFrame(我使用的是Windows L & F),但是當我最大化JInternalFrame時,它不能像Windows一樣工作。我的意思是框架應該消失,3個按鈕enter image description here應該在JMenuBar中。
Maxenzing JenternalFrame in JMenuBar

enter image description here

enter image description here

有沒有什麼解決方案,使我在的JInternalFrame JMenuBar的最大化?

回答

2

我「猜測」你設置框架的邊界(大小/位置)以匹配JDesktopPane的大小。您應該使用JInternalFrame#setMaximum

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.beans.PropertyVetoException; 
import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.JInternalFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

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

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

       JDesktopPane dp = new JDesktopPane() { 
        @Override 
        public Dimension getPreferredSize() { 
         return new Dimension(400, 400); 
        } 
       }; 
       JInternalFrame iFrame = new JInternalFrame("Test", true, true, true, true); 
       iFrame.add(new TestPane()); 
       iFrame.setVisible(true); 
       iFrame.pack(); 
       dp.add(iFrame); 

       JMenuBar mb = new JMenuBar(); 
       JMenu menu = new JMenu("Window"); 
       JMenuItem mi = new JMenuItem("Maximise"); 
       mi.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
         JInternalFrame iFrame = dp.getSelectedFrame(); 
         if (iFrame != null) { 
          try { 
           iFrame.setMaximum(true); 
          } catch (PropertyVetoException ex) { 
           ex.printStackTrace(); 
          } 
         } 
        } 
       }); 
       menu.add(mi); 

       mi = new JMenuItem("Restore"); 
       mi.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
         JInternalFrame iFrame = dp.getSelectedFrame(); 
         if (iFrame != null) { 
          try { 
           iFrame.setMaximum(false); 
          } catch (PropertyVetoException ex) { 
           ex.printStackTrace(); 
          } 
         } 
        } 
       }); 
       menu.add(mi); 

       mb.add(menu); 

       JFrame frame = new JFrame("Testing"); 
       frame.setJMenuBar(mb); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(dp); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 

       dp.setSelectedFrame(iFrame); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

    } 

} 

在C#這是一個默認fonctionality即當u最大化的內部框架是在菜單欄和它周圍的藍色框消失真實最大化,但它不是在Java

同樣的事情

這不能在Swing做......至少,它不能這樣做,除非你想完全重新編寫的外觀和感覺

+0

還是同樣的問題JInternalFrame未處於最大化的JMenuBar。 – SlimenTN

+0

考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它演示了您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的混淆和更好的迴應 – MadProgrammer

+0

實際上我沒有在代碼或JInternalFrame最大化問題我發佈了2張圖片,顯示我到底想要什麼。第一張圖是一個隨機應用程序(由C#創建,我猜),因爲你可以看到JInternalFrame在菜單欄中是最大化的。第二張圖是我用Java編寫的應用程序,你也可以看到JInternalFrame是最大化的,但不是在JMenuBar中,就像第一張圖片。我問這是Java L&F中的一個bug還是有解決方案。 – SlimenTN