Java 如何调整按钮的大小?
如何调整按钮的大小?我尝试过多种方法,如setSize和setPreferredSize,但都不起作用Java 如何调整按钮的大小?,java,Java,如何调整按钮的大小?我尝试过多种方法,如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
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?");;
}
}
包测试;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JLabel;
导入javax.swing.JButton;
公共类RPS扩展了JPanel{
公共静态void main(字符串[]args){
JFrame=新JFrame(“石头剪纸”);
JPanel面板=新的JPanel();
JLabel label=新JLabel(“您会选择石头、布还是剪刀?”);
JButton-button=新的JButton(“我是一个按钮”);
label.setHorizontalAlignment(0);
标签。设置垂直对齐(1);
frame.pack();
frame.getContentPane();
框架。片名(“石头剪纸”);
帧设置大小(640480);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。添加(面板);
框架。添加(标签);
框架。添加(按钮);
setToolTipText(“你没有单击我吗?”);;
}
}
通常不需要调整按钮的大小。按钮将根据按钮使用的文本和Font
确定其自身的大小。然后,布局管理器将使用此信息根据布局管理器的规则为组件提供尺寸和位置
如果需要在文本周围留出额外空间,则可以使用:
button.setMargin(...);
您的代码还有许多其他问题:
frame.add(panel);
frame.add(label);
frame.add(button);
这没用。默认情况下,框架的内容窗格使用边框布局
。如果未指定约束,则组件将添加到中心
,但中心只能显示一个组件
,因此只能看到最后一个组件
frame.setSize(640, 480);
没有必要这样说。pack()将所有组件设置为其首选尺寸
frame.setVisible(true);
这应该是在所有组件添加到框架之后执行的最后一条语句
frame.getContentPane();
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?");;
}
}
这不起任何作用,您不会将返回值赋给任何变量
label.setHorizontalAlignment(0);
label.setVerticalAlignment(1);
不要使用魔法数字。没有人知道0和1的用途。请阅读API,了解您可以使用的变量的方法
阅读上Swing教程中的部分,以获取更多信息和工作示例,帮助您入门。从如何使用BorderLayout
一节开始,了解当前代码不起作用的原因,以及在将组件添加到框架时如何指定“约束条件”。包测试;
frame.getContentPane();
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?");;
}
}
导入java.awt.BorderLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
公共类RPS扩展了JPanel{
公共静态void main(字符串[]args){
JFrame=新JFrame(“石头剪纸”);
JPanel面板=新的JPanel();
JLabel label=新JLabel(“您会选择石头、布还是剪刀?”);
JButton-button=新的JButton(“我是一个按钮”);
label.setHorizontalAlignment(0);
标签。设置垂直对齐(1);
panel.add(button);按钮占据了整个页面,它并不决定它自己的大小。@DerekSturm,正如我所说的,您正在将按钮添加到BorderLayout的中心。BorderLayout将调整组件的大小,以占据框架的所有可用空间。请删除setSize()语句和pack()将完成它的工作。如果你不喜欢布局,那么使用不同的布局管理器。我给了你一个到教程的链接,所以请阅读教程并下载示例并使用它们。然后为你想要的布局使用合适的布局管理器。按钮是否可以不占用整个框架,但仍然是一个良好的大小?@DerekSturm,你对“好尺寸”的定义与我的定义不同。我让每个组件确定自己的大小。因此,您需要做的就是使用适当的布局管理器。学习Swing没有捷径。阅读教程并下载示例。实际上,您程序中的每一行代码都是错误的。从一个工作示例开始,然后进行更改。我希望在按钮周围留出一些空间,不要让一切都变得拥挤。非常感谢。我对Java非常陌生。没问题。接受我的回答:p(1-),不要使用setPreferredSize()。为什么不呢?您提供的链接谈到了如何使用它们。有更好的方法可以影响组件的大小,而不是硬编码一些随机值。请参阅我回答中的第一个建议。这是一种更为平台中立的方法,允许在组件的LAF、字体、文本或任何其他属性发生变化时动态调整大小。是的,在这样一个简单的情况下,它会起作用,但当您开始设计真正的动态应用程序时,您正在学习一些坏习惯。