java - 在 Java 中最大化 JInternalFrame

标签 java swing user-interface 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, 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 - 在 Java 中最大化 JInternalFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438035/

相关文章:

java - 如何使用 JFrame、JLabel、使用 setForeground 创建颜色模拟?

java - 退出按钮不起作用

java - 图标处理抛出 NullPointerException

python - 如何在 python tkinter 中验证输入小部件

java - 如何多次创建新的和处置jcomponents?

java - 如何通过 LDAP 将 userWorkstation 传递到 Active Directory 进行登录?

java - 我怎样才能不通过 putAll() 覆盖值而是添加到当前值?

C# 更改桌面模式

java - 如何知道java方法正在阻塞当前线程

java - 更改 actionBar 下拉菜单背景颜色