调整 JButton 的大小
Resizing a JButton
我想知道如何在我的代码中调整 'alarmClockButton' 的大小,我试过 setSize();和 setPreferredSize();但是它们都不起作用。为此,我正在使用 GridBagLayout。有什么想法吗?
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);
}
}
谢谢!
您可以通过GridBagConstraints
来影响按钮的大小,例如...
使用 ipadx
和 ipady
,它们添加到组件 preferredSize
gbc.ipadx = 100;
gbc.ipady = 100;
生成类似于...
您还可以使用...
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
这会改变组件将占据的 space 数量以及组件在给定单元格中的填充方式...
注:
因为您使用 JLabel
作为背景组件,您将被限制为标签的首选大小,该大小仅通过 icon
和 text
属性计算, 它不会使用布局管理器来计算这些结果。
我想知道如何在我的代码中调整 'alarmClockButton' 的大小,我试过 setSize();和 setPreferredSize();但是它们都不起作用。为此,我正在使用 GridBagLayout。有什么想法吗?
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);
}
}
谢谢!
您可以通过GridBagConstraints
来影响按钮的大小,例如...
使用 ipadx
和 ipady
,它们添加到组件 preferredSize
gbc.ipadx = 100;
gbc.ipady = 100;
生成类似于...
您还可以使用...
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
这会改变组件将占据的 space 数量以及组件在给定单元格中的填充方式...
注:
因为您使用 JLabel
作为背景组件,您将被限制为标签的首选大小,该大小仅通过 icon
和 text
属性计算, 它不会使用布局管理器来计算这些结果。