Resize the components of the frame in full-screen mode

13,240

Solution 1

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

Solution 2

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

StampedeMonitor - small

Wide

StampedeMonitor - wide

Tall

StampedeMonitor - 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);
            }
        });
    }
}
Share:
13,240
Abs
Author by

Abs

Updated on June 08, 2022

Comments

  • Abs
    Abs about 2 years

    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

    MSM GUI

    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);
        }
    }