如何调整按钮的大小?我尝试了各种方法,比如setSize和setPreferredSize,但它们没有工作。
package tests;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
public class RPS extends JPanel{
public static void main(String[] args) {
JFrame frame = new JFrame("Rock Paper Scissors");
JPanel panel = new JPanel();
JLabel label = new JLabel("<html>Will you choose <i>rock,</i> <i>paper,</i> or <i>scissors?</i></html>");
JButton button = new JButton("I am a button.");
label.setHorizontalAlignment(0);
label.setVerticalAlignment(1);
frame.pack();
frame.getContentPane();
frame.setTitle("Rock Paper Scissors");
frame.setSize(640, 480);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.add(label);
frame.add(button);
button.setToolTipText("Y U no click me?");;
}
}
答案 0 :(得分:1)
通常无需调整按钮的大小。该按钮将根据文本和按钮使用的Font
确定自己的大小。然后,布局管理器将使用此信息根据布局管理器的规则为组件提供大小和位置。
如果你想在文本周围留出额外的空间,那么你可以使用:
button.setMargin(...);
您的代码还有许多其他问题:
frame.add(panel);
frame.add(label);
frame.add(button);
这不会做任何事情。默认情况下,框架的内容窗格使用BorderLayout
。如果您没有指定约束,则组件将添加到CENTER
,但CENTER
中只能显示一个组件,因此您只能看到最后一个组件。
frame.setSize(640, 480);
没有必要这样说。 pack()会将所有组件设置为首选大小。
frame.setVisible(true);
这应该是执行的最后一个语句,“在”所有组件都已添加到框架之后。
frame.getContentPane();
这没有任何作用,您不会将返回的值分配给任何变量。
label.setHorizontalAlignment(0);
label.setVerticalAlignment(1);
不要使用魔术数字。没有人知道0和1用于什么。请阅读适用于您可以使用的变量的方法的API。
阅读Layout Managers上Swing教程中的部分,了解更多信息和工作示例,以帮助您入门。从How to Use BorderLayout
上的部分开始,了解当前代码无效的原因,并了解在将组件添加到框架时如何指定“约束”。
答案 1 :(得分:-1)
package tests;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class RPS extends JPanel{
public static void main(String[] args) {
JFrame frame = new JFrame("Rock Paper Scissors");
JPanel panel = new JPanel();
JLabel label = new JLabel("<html>Will you choose <i>rock,</i> <i>paper,</i> or <i>scissors?</i></html>");
JButton button = new JButton("I am a button.");
label.setHorizontalAlignment(0);
label.setVerticalAlignment(1);
panel.add(button); <-add button to panel
frame.add(panel, BorderLayout.SOUTH); <--- you need to say where you are adding the panel onto the frame.
frame.add(label,BorderLayout.NORTH); <--- same with the label
frame.pack();
frame.setTitle("Rock Paper Scissors");
frame.setSize(640, 480);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.setToolTipText("Y U no click me?");;
}
}
如果你想在中心有一个更大的按钮,可以用以下方法修改:
button.setPreferredSize(new Dimension(300, 300));
panel.add(button);
frame.add(panel, BorderLayout.CENTER); <--adds to center rather than south