Resize the components of the frame in full-screen mode
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
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);
}
});
}
}
Abs
Updated on June 08, 2022Comments
-
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
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); } }