I was wondering how I can resize the 'alarmClockButton' in my code, I've tried setSize(); and setPreferredSize(); however they both don't work. I am using the GridBagLayout for this. Any ideas?
public class MainMenu {
// JFrame = the actual menu / frame.
private JFrame frame;
// JLabel = provides text instructions or information on a GUI —
// display a single line of read-only text, an image or both text and an image.
private JLabel background, logo;
// JButton = button.
private JButton alarmClockButton;
// Constructor to create menu
public MainMenu() {
frame = new JFrame("Alarm Clock");
alarmClockButton = new JButton("Timer");
alarmClockButton.setPreferredSize(new Dimension(1000, 1000));
// Add an event to clicking the button.
alarmClockButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO: CHANGE TO SOMETHING NICER
JOptionPane.showMessageDialog(null, "This feature hasn't been implemented yet.", "We're sorry!",
JOptionPane.ERROR_MESSAGE);
}
});
// Creating the background
try {
background = new JLabel(new ImageIcon(ImageIO.read(getClass()
.getResourceAsStream("/me/devy/alarm/clock/resources/background.jpg"))));
logo = new JLabel(new ImageIcon(ImageIO.read(getClass()
.getResourceAsStream("/me/devy/alarm/clock/resources/logo.png"))));
} catch (IOException e) {
e.printStackTrace();
}
background.setLayout(new GridBagLayout());
frame.setContentPane(background);
GridBagConstraints gbc = new GridBagConstraints();
// Inset = spacing between each component
gbc.insets = new Insets(15,15, 15, 15);
// Positioning
gbc.gridx = 0;
gbc.gridy = 0;
frame.add(logo, gbc);
// Positioning
// Keep x the same = aligned. On same x-coordinate (think math!)
gbc.gridx = 0;
// Y = 2 down
gbc.gridy = 1;
frame.add(alarmClockButton, gbc);
frame.setVisible(true);
frame.setSize(550, 200);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
alarmClockButton.setForeground(Color.RED);
}
}
Thanks!
You can effect the size of the button through the GridBagConstraints
, for example...
Using ipadx
and ipady
, which add to the components preferredSize
gbc.ipadx = 100;
gbc.ipady = 100;
Produces something like...
You can also use...
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
which changes the amount of space which the component will occupy and how the component is filled within it's given cell...
Note:
Because you're using a JLabel
as your background component, you will be limited to the the label's preferred size, which is calculated through the icon
and text
properties only, it won't use the layout manager to calculate these results.