Resize the components of the frame in full-screen mode

亡梦爱人 提交于 2019-12-23 15:12:47

问题


I want my frame components to be always adjusted in the screen, regardless of screen size. I draw the frame in my Laptop (small screen) and when I run my application in another machine (jar file) with a big screen the frame components doesn't re-size!

How I can make my frame resize it's components when I put the frame in full-screen mode in any machine?

Current layout

Code

package package_MSM;

import java.awt.Color;

public class MSMGui extends JFrame 
{
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JTextArea textArea;
    private JPanel pnlLogo1;
    private JLabel lblLogo1;;
    private static JButton btnSmpd1;
    private static JButton btnSmpd2;
    private static JButton btnSmpd3;
    private static JButton btnSmpd4;
    private static JButton btnSmpd5;
    private static JButton btnSmpd6;
    private static JButton btnSmpd7;

    /**
     * Launch the application.
     */

    public static void main(String[] args) 
    {
        EventQueue.invokeLater(new Runnable() 
        {
            public void run() 
            {
                try 
                {
                    MSMGui frame = new MSMGui();
                    frame.setExtendedState(Frame.MAXIMIZED_BOTH);
                    frame.setVisible(true);

                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public MSMGui() 
    {
        setResizable(true);
        setTitle("MSM");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 841, 334);
        contentPane = new JPanel();
        contentPane.setBackground(Color.BLACK);
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JPanel panelSmpd = new JPanel();
        panelSmpd.setBounds(10, 69, 804, 105);
        panelSmpd.setBackground(Color.BLACK);
        contentPane.add(panelSmpd);
        panelSmpd.setLayout(null);

        JMenuBar menuBar = new JMenuBar();
        menuBar.setBackground(UIManager.getColor("MenuBar.background"));
        menuBar.setFont(new Font("Segoe UI", Font.PLAIN, 12));
        setJMenuBar(menuBar);

        JMenu mnMenu = new JMenu("Menu");
        menuBar.add(mnMenu);

        JMenuItem mntmAlarmStop = new JMenuItem("Stop alarm sound");
        mntmAlarmStop.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {
                stopAlarm();
                textArea.append(dateTime()+ " Alarm cleared by the Operator from the Menu Bar\n");
                writeTofile(dateTime()+ " Alarm cleared by the Operator from the Menu Bar\n");
            }
        });
        mnMenu.add(mntmAlarmStop);

        JMenuItem mntmExit = new JMenuItem("Exit");
        mntmExit.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {
                // display the showOptionDialog
                Object[] options = { "OK", "Cancel" };
                int choice = JOptionPane.showOptionDialog(null, 
                                        "You really want to quit?", 
                                        "Quit?", 
                                        JOptionPane.YES_NO_OPTION, 
                                        JOptionPane.QUESTION_MESSAGE, 
                                        null, 
                                        options, 
                                        options[0]);

                // interpret the user's choice
                if (choice == JOptionPane.YES_OPTION)
                {
                    System.exit(0);
                }
            }
        });
        mnMenu.add(mntmExit);       

        btnSmpd1 = new JButton("SPD 1");
        btnSmpd1.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent arg0) 
            {               
                btnSmpd1.setBackground(Color.YELLOW);
                stopAlarm();
                btnSmpd1.setEnabled(false);
                textArea.append(dateTime() + " Alarm Stampede 1 cleared by the Operator\n");
                writeTofile(dateTime()  + " Alarm Stampede 1 cleared by the Operator\n");
            }
        });
        btnSmpd1.setFont(new Font("Tahoma", Font.BOLD, 15));
        btnSmpd1.setBounds(23, 13, 100, 74);
        panelSmpd.add(btnSmpd1);
        btnSmpd1.setOpaque(true);

        btnSmpd2 = new JButton("SPD 2");
        btnSmpd2.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent arg0) 
            {               
                btnSmpd2.setBackground(Color.YELLOW);
                stopAlarm();
                btnSmpd2.setEnabled(false);
                textArea.append(dateTime() + " Alarm Stampede 2 cleared by the Operator\n");
                writeTofile(dateTime()  + " Alarm Stampede 2 cleared by the Operator\n");
            }
        });
        btnSmpd2.setFont(new Font("Tahoma", Font.BOLD, 15));
        btnSmpd2.setBounds(133, 13, 100, 74);
        panelSmpd.add(btnSmpd2);
        btnSmpd2.setOpaque(true);

        btnSmpd3 = new JButton("SPD 3");
        btnSmpd3.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent arg0) 
            {
                btnSmpd3.setBackground(Color.YELLOW);
                stopAlarm();
                btnSmpd3.setEnabled(false);
                textArea.append(dateTime() + " Alarm Stampede 3 cleared by the Operator\n");
                writeTofile(dateTime()  + " Alarm Stampede 3 cleared by the Operator\n");
            }
        });
        btnSmpd3.setFont(new Font("Tahoma", Font.BOLD, 15));
        btnSmpd3.setBounds(243, 13, 100, 74);
        panelSmpd.add(btnSmpd3);
        btnSmpd3.setOpaque(true);

        btnSmpd4 = new JButton("SPD 4");
        btnSmpd4.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent arg0) 
            {
                btnSmpd4.setBackground(Color.YELLOW);
                stopAlarm();
                btnSmpd4.setEnabled(false);
                textArea.append(dateTime() + " Alarm Stampede 4 cleared by the Operator\n");
                writeTofile(dateTime()  + " Alarm Stampede 4 cleared by the Operator\n");
            }
        });
        btnSmpd4.setFont(new Font("Tahoma", Font.BOLD, 15));
        btnSmpd4.setBounds(353, 13, 100, 74);
        panelSmpd.add(btnSmpd4);
        btnSmpd4.setOpaque(true);

        btnSmpd5 = new JButton("SPD 5");
        btnSmpd5.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent arg0) 
            {               
                btnSmpd5.setBackground(Color.YELLOW);
                stopAlarm();
                btnSmpd5.setEnabled(false);
                textArea.append(dateTime() + " Alarm Stampede 5 cleared by the Operator\n");
                writeTofile(dateTime()  + " Alarm Stampede 5 cleared by the Operator\n");
            }
        });
        btnSmpd5.setFont(new Font("Tahoma", Font.BOLD, 15));
        btnSmpd5.setBounds(463, 11, 100, 76);
        panelSmpd.add(btnSmpd5);
        btnSmpd5.setOpaque(true);

        btnSmpd6 = new JButton("SPD 6");
        btnSmpd6.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent arg0) 
            {               
                btnSmpd6.setBackground(Color.YELLOW);
                stopAlarm();
                btnSmpd6.setEnabled(false);
                textArea.append(dateTime() + " Alarm Stampede 6 cleared by the Operator\n");
                writeTofile(dateTime()  + " Alarm Stampede 6 cleared by the Operator\n");
            }
        });
        btnSmpd6.setFont(new Font("Tahoma", Font.BOLD, 15));
        btnSmpd6.setBounds(573, 11, 100, 76);
        panelSmpd.add(btnSmpd6);
        btnSmpd6.setOpaque(true);

        btnSmpd7 = new JButton("SPD 7");
        btnSmpd7.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent arg0) 
            {               
                btnSmpd7.setBackground(Color.YELLOW);
                stopAlarm();
                btnSmpd7.setEnabled(false);
                textArea.append(dateTime() + " Alarm Stampede 7 cleared by the Operator\n");
                writeTofile(dateTime()  + " Alarm Stampede 7 cleared by the Operator\n");
            }
        });
        btnSmpd7.setFont(new Font("Tahoma", Font.BOLD, 15));
        btnSmpd7.setBounds(683, 11, 100, 76);
        panelSmpd.add(btnSmpd7);
        btnSmpd7.setOpaque(true);

        JLabel lblTitle = new JLabel("MNOC Stampede Monitor");
        lblTitle.setBounds(200, 11, 423, 27);
        lblTitle.setHorizontalTextPosition(SwingConstants.CENTER);
        lblTitle.setForeground(Color.GRAY);
        lblTitle.setHorizontalAlignment(SwingConstants.CENTER);
        lblTitle.setFont(new Font("Tahoma", Font.BOLD, 32));
        contentPane.add(lblTitle);

        scrollPane = new JScrollPane();
        scrollPane.setBounds(40, 172, 754, 91);
        contentPane.add(scrollPane);

        textArea = new JTextArea();
        scrollPane.setViewportView(textArea);

        ImageIcon image = new ImageIcon("logo.jpg");

        pnlLogo1 = new JPanel();
        pnlLogo1.setBounds(50, 11, 70, 47);
        contentPane.add(pnlLogo1);
        pnlLogo1.setLayout(null);
        lblLogo1 = new JLabel();
        lblLogo1.setBounds(0, 0, 70, 47);
        pnlLogo1.add(lblLogo1);
        lblLogo1.setOpaque(true);
        lblLogo1.setVisible(true);
        lblLogo1.setIcon(image);
        pnlLogo1.setVisible(true);
    }
}

回答1:


See Laying Out Components Within a Container.


OK, I hacked out some code in the shape of your original GUI that uses layouts and will resize. Since I was not clear on where the extra height should be assigned, I gave it to the text area. Colors, font size etc. are left as an exercise for the user.

Screenshots

Small

Wide

Tall

SSCCE

package test;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;

public class StampedeMonitor {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new JFrame("MSM");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                JPanel gui = new JPanel(new BorderLayout(5,5));
                gui.setBorder(new EmptyBorder(10,10,10,10));

                JPanel logos = new JPanel(new BorderLayout(5,5));
                gui.add(logos, BorderLayout.NORTH);
                JPanel icon = new JPanel();
                // this should be set by the image
                icon.setPreferredSize(new Dimension(50,50));
                icon.setBackground(Color.RED);
                icon.setOpaque(true);
                logos.add(icon, BorderLayout.WEST);
                logos.add(new JLabel("MNOC Stampede Monitor", JLabel.CENTER));

                JPanel controls = new JPanel(new BorderLayout(5,5));
                gui.add(controls, BorderLayout.CENTER);
                JPanel buttons = new JPanel(new GridLayout(1,0,5,5));
                controls.add(buttons, BorderLayout.NORTH);
                for (int ii=1; ii<8; ii++) {
                    JButton button = new JButton("SPD " + ii);
                    Dimension d = button.getPreferredSize();
                    // make the buttons twice as tall as default
                    Dimension big = new Dimension(
                            (int)d.getWidth(),
                            (int)d.getHeight()*2);
                    button.setPreferredSize(big);
                    buttons.add(button);
                }
                controls.add(new JScrollPane( new JTextArea(5,10) ));

                f.setContentPane(gui);
                f.pack();
                f.setVisible(true);
            }
        });
    }
}



回答2:


If someone else have the same problem the solution is to use Layouts instead of using the null layout.



来源:https://stackoverflow.com/questions/9815922/resize-the-components-of-the-frame-in-full-screen-mode

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