Maximizing a JFrame on action?

女生的网名这么多〃 提交于 2019-12-23 02:28:16

问题


Does anyone know how to maximize a JFrame once a specfic action has occured? I'll post my code below, I'm a fiend for not commenting my code (I'll do it at some point) but it should be fairly self explanitory. What I was trying to do was to get the frame to maximize once the option was selected from the menu. If anyone can tell me how I need to edit my code to pull this off, it would be greatly appreciated.

Thanks!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JFrame;

public class MainMenu implements ActionListener {
    JTextArea output;
    JScrollPane scrollPane;
    String newline = "\n";
    MapMenu maps = new MapMenu();

public JMenuBar createMenuBar() {
    JMenuBar menuBar;
    JMenu menu;
    JMenuItem menuItem;
    JMenuItem minOption, maxOption;

    //Create the menu bar.
    menuBar = new JMenuBar();

    //Build the first menu.
    menu = new JMenu("File");
    menu.setMnemonic(KeyEvent.VK_A);
    menu.getAccessibleContext().setAccessibleDescription("For window operations");
    menuBar.add(menu);

    minOption = new JMenuItem("Minimize", KeyEvent.VK_T);
    minOption.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
    minOption.getAccessibleContext().setAccessibleDescription("Will minimize window");
    minOption.setActionCommand("Minimize");
    minOption.addActionListener(this);
    menu.add(minOption);

    maxOption = new JMenuItem("Maximize", KeyEvent.VK_T);
    maxOption.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK));
    maxOption.getAccessibleContext().setAccessibleDescription("Will maximize window");
    maxOption.setActionCommand("Maximize");
    maxOption.addActionListener(this);
    menu.add(maxOption);

    menuItem = new JMenuItem("Exit", KeyEvent.VK_T);
    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_3, ActionEvent.ALT_MASK));
    menuItem.getAccessibleContext().setAccessibleDescription("Will close window");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    //Build second menu in the menu bar.
    menu = new JMenu("Pages");
    menu.setMnemonic(KeyEvent.VK_N);
    menu.getAccessibleContext().setAccessibleDescription("For accessing other pages");
    menuBar.add(menu);

    menuItem = new JMenuItem("Date Calculator", KeyEvent.VK_T);
    menuItem.getAccessibleContext().setAccessibleDescription("Opens date calculator");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("Maps", KeyEvent.VK_T);
    menuItem.getAccessibleContext().setAccessibleDescription("Opens popular maps");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("Points System", KeyEvent.VK_T);
    menuItem.getAccessibleContext().setAccessibleDescription("Opens points chart");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("Foreign Language Re-targets", KeyEvent.VK_T);
    menuItem.getAccessibleContext().setAccessibleDescription("Opens LPS Lists");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    //Build third menu in the menu bar.
    menu = new JMenu("Resources");
    menu.setMnemonic(KeyEvent.VK_N);
    menu.getAccessibleContext().setAccessibleDescription("For external resources");
    menuBar.add(menu);

    menuItem = new JMenuItem("Helpful Sites", KeyEvent.VK_T);
    menuItem.getAccessibleContext().setAccessibleDescription("Opens website links");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    //Build fourth menu in the menu bar.
    menu = new JMenu("Help");
    menu.setMnemonic(KeyEvent.VK_N);
    menu.getAccessibleContext().setAccessibleDescription("For help pages");
    menuBar.add(menu);

    menuItem = new JMenuItem("How To Use", KeyEvent.VK_T);
    menuItem.getAccessibleContext().setAccessibleDescription("Opens tutorial for AAA");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("About", KeyEvent.VK_T);
    menuItem.getAccessibleContext().setAccessibleDescription("Opens information about AAA");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("Update", KeyEvent.VK_T);
    menuItem.getAccessibleContext().setAccessibleDescription("Opens website for AAA");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    return menuBar;
}

public Container createContentPane() {
    //Create the content-pane-to-be.
    JPanel contentPane = new JPanel(new BorderLayout());
    contentPane.setOpaque(true);

    //Create a scrolled text area.
    output = new JTextArea(5, 30);
    output.setEditable(false);
    scrollPane = new JScrollPane(output);

    //Add the text area to the content pane.
    contentPane.add(scrollPane, BorderLayout.CENTER);

    return contentPane;
}

// Returns just the class name -- no package info.
protected String getClassName(Object o) {
    String classString = o.getClass().getName();
    int dotIndex = classString.lastIndexOf(".");
    return classString.substring(dotIndex+1);
}

/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = MainMenu.class.getResource(path);
    if (imgURL != null) {
        return new ImageIcon(imgURL);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

/**
 * Create the GUI and show it.  For thread safety,
 * this method should be invoked from the
 * event-dispatching thread.
 */
private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame.setDefaultLookAndFeelDecorated(false);
    JFrame frame = new JFrame("Account Appeal Aide");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Create and set up the content pane.
    MainMenu demo = new MainMenu();
    frame.setJMenuBar(demo.createMenuBar());
    frame.setContentPane(demo.createContentPane());

    //Display the window.
    frame.setSize(500, 400);
    frame.setVisible(true);
    frame.setResizable(false);

    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

    int w = frame.getSize().width;
    int h = frame.getSize().height;
    int x = (dim.width-w)/2; 
    int y = (dim.height-h)/2; 

    frame.setLocation(x, y); 
}

public void maximizeFrame(JFrame aFrame) {
    aFrame.setExtendedState(aFrame.getExtendedState()|JFrame.MAXIMIZED_BOTH);
}

public void actionPerformed(ActionEvent e) {
    if("Minimize".equals(e.getActionCommand())) {
        maps.openMapMenu();
    }
    if("Maximize".equals(e.getActionCommand())) {
        //maximizeFrame();
    }
}

public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}

}


回答1:


You don't need to include the current state; this should be enough:

aFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);

You will need access to your frame in the actionPerformed method, though, so you should probably make it a private field.

At the beginning of your class, you declare some fields. Those should all be marked private, and you should add the frame as well. So it would look like this:

public class MainMenu implements ActionListener {
    private JTextArea output;
    private JScrollPane scrollPane;
    private String newline = "\n";
    private MapMenu maps = new MapMenu();
    private JFrame frame;

Then, later, when you have JFrame frame = new JFrame("Account Appeal Aide");, just do frame = new JFrame("Account Appeal Aide"); instead; frame has already been declared. Then, you can use it in actionPerformed as well:

if("Maximize".equals(e.getActionCommand())) {
    maximizeFrame(frame);
}


来源:https://stackoverflow.com/questions/3507772/maximizing-a-jframe-on-action

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!