在Java中最大化JInternalFrame

我试图让JInternalFrame在启动时最大化.我已经对此进行了网络搜索并尝试了各种代码建议,但它们似乎无法在我的机器上正常运行,该机器在 Windows 7上运行 Java 6.

我已经简化了下面的代码,以便更容易隔离解决方案.

任何人都可以告诉我如何更改下面的代码,以便内部框架在创建时自动最大化?

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JlayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.Keystroke;

public class MaximizeInternalFrame extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
JlayeredPane desktop;
JInternalFrame internalFrame;

public MaximizeInternalFrame() {
    super("Test To Maximize Internal Frame");
    this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);

    //Make the big window be indented 50 pixels from each edge of the screen.
    int inset = 50;
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension screenMinus50 = new Dimension(screenSize.width - inset*2,screenSize.height - inset*2); 

    this.setPreferredSize(screenMinus50);
    desktop = new JDesktopPane();
    setJMenuBar(createMenuBar());
    this.add(desktop,BorderLayout.CENTER);
    this.pack();
    this.setSize(screenMinus50);
    this.setLocationRelativeto(null);
}
protected JMenuBar createMenuBar() {
    JMenuBar menuBar = new JMenuBar();
    //Set up the File menu.
    JMenu FileMenu = new JMenu("File");
    FileMenu.setMnemonic(KeyEvent.VK_F);
    menuBar.add(FileMenu);
    //Set up the first menu item.
    JMenuItem menuItem = new JMenuItem("New");
    menuItem.setMnemonic(KeyEvent.VK_N);
    menuItem.setAccelerator(Keystroke.getKeystroke(KeyEvent.VK_N,ActionEvent.ALT_MASK));
    menuItem.setActionCommand("new");
    menuItem.addActionListener(new OpenListener());
    FileMenu.add(menuItem);
    //Set up the second menu item.
    menuItem = new JMenuItem("Quit");
    menuItem.setMnemonic(KeyEvent.VK_Q);
    menuItem.setAccelerator(Keystroke.getKeystroke(KeyEvent.VK_Q,ActionEvent.ALT_MASK));
    menuItem.setActionCommand("quit");
    menuItem.addActionListener(this);
    FileMenu.add(menuItem);

    return menuBar;
    }
class OpenListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        // create internal frame
        internalFrame = new JInternalFrame("this internal frame needs to be maximized",true,true);
        desktop.add(internalFrame);
        internalFrame.setSize(internalFrame.getMaximumSize());
        internalFrame.pack();
        internalFrame.setVisible(true);
    }
}
public static void main(String args[]) {
    MaximizeInternalFrame myParentFrame = new MaximizeInternalFrame();
    myParentFrame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {if ("quit".equals(e.getActionCommand())){System.exit(0);}}
}

解决方法

在internalFrame.setVisible(true)之后添加以下内容
try {
  internalFrame.setMaximum(true);
} catch (PropertyVetoException e) {
  // Vetoed by internalFrame
  // ... possibly add some handling for this case
}

您还可以删除internalFrame.setSize(internalFrame.getMaximumSize());

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...