2015-05-24 2 views
0

Так что я создал JDesktopPane и JInternalFrame в нем (и я использую окна L & F), но когда я максимизирую JInternalFrame, он не работает, как в Windows. Я хочу, чтобы кадр исчез и кнопки 3 enter image description here должен находиться внутри JMenuBar.
Maximising JInternalFrame в 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, что, когда и разворачивать внутренний фрейм он максимизируется в строке меню и синей рамкой вокруг него исчезнет, ​​но это не то же самое в Java

Это не может быть сделано в свинге ... или, по крайней мере, это не может быть сделано, если вы не хотите, чтобы полностью переписать внешний вид и

+0

все та же проблема JInternalFrame не развернута в JMenuBar. – SlimenTN

+0

Рассмотрите возможность использования [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer

+0

На самом деле у меня нет проблем с кодом или максимизацией JInternalFrame. Я разместил 2 снимка, которые показывают, что именно я хочу. Первый pic - случайное приложение (созданное C#, я думаю), так как вы можете видеть, что JInternalFrame максимизируется в строке меню. Второй pic - мое приложение с java, так как вы также можете видеть, что JInternalFrame максимизирован, но не в JMenuBar, как в первый pic.I спрашивал, если это ошибка в java L & F или есть решение для нее. – SlimenTN

Смежные вопросы