Java 带JFrame的两个按钮(具有固定的宽度/高度和固定的位置)
我想先说,是的,这是一个家庭作业问题 我们被告知要创建两个按钮来增加各自的计数器。计数器部分在此处未显示的另一个类中完成 首先,我创建了一个新的Java 带JFrame的两个按钮(具有固定的宽度/高度和固定的位置),java,button,jframe,Java,Button,Jframe,我想先说,是的,这是一个家庭作业问题 我们被告知要创建两个按钮来增加各自的计数器。计数器部分在此处未显示的另一个类中完成 首先,我创建了一个新的JFrame和两个带有自己文本的按钮 JFrame frame = new JFrame(); JButton button1 = new JButton("Click me!"); JButton button2 = new JButton("Click me too!"); 我给他们定了界限 button1.setBounds(0, 0, 100,
JFrame
和两个带有自己文本的按钮
JFrame frame = new JFrame();
JButton button1 = new JButton("Click me!");
JButton button2 = new JButton("Click me too!");
我给他们定了界限
button1.setBounds(0, 0, 100, 50);
button2.setBounds(0, 50, 100, 50);
将这些按钮添加到框架上
frame.add(button1);
frame.add(button2);
附加各自的操作侦听器(因为它们各自递增自己的计数器)
设置帧大小和其他设置
frame.setSize(100, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
话虽如此,这就是输出:
如您所见,button1
位于button2
后面,尽管有硬编码的.setBound
属性
我尝试过更改按钮2.setBounds(..)
的不同设置,但似乎我输入的内容实际上没有改变其位置或大小。但是,将输入更改为按钮1
,会更改其位置/大小
给出了什么?您应该避免使用
设置边界(…)
和空布局,因为这会导致非常不灵活的GUI,虽然它们在一个平台上看起来很好,但在大多数其他平台或屏幕分辨率上看起来很糟糕,并且很难更新和维护
相反,如果您希望一个JButton位于另一个JButton之上,并且它们是相等的边,为什么不简单地使用
GridLayout(0,1)
?您应该避免使用setBounds(…)
和空布局,因为这使得GUI非常不灵活,虽然它们在一个平台上看起来不错,但在大多数其他平台或屏幕分辨率上看起来很糟糕,并且很难更新和维护
相反,如果您希望一个JButton位于另一个JButton之上,并且它们是相等的边,为什么不简单地使用GridLayout(0,1)
JFrame默认使用BroderLayout
,而add()
方法默认在中心添加组件。i、 e在同一位置添加两个按钮。使用重载的add()
方法以及位置,例如:
frame.add(button1,BorderLayout.NORTH);
或者您可以使用JPanel
。首先在面板上添加按钮,然后在JFrame
上添加面板
JPanel panel=new JPanel();
panel.add(button1);
panel.add(button2);
frame.add(panel);
您还可以设置按钮的对齐方式
JPanel panel=new JPanel(new FlowLayout(FlowLayout.RIGHT));
或者,您可以定义它们之间的水平/垂直间隙
JPanel panel=new JPanel(new FlowLayout(FlowLayout.RIGHT,10,10));
最后,有关更多信息,请阅读您将在何处找到样本。
JFrame默认使用BroderLayout
,而add()
方法默认在中心添加组件。i、 e在同一位置添加两个按钮。使用重载的add()
方法以及位置,例如:
frame.add(button1,BorderLayout.NORTH);
或者您可以使用JPanel
。首先在面板上添加按钮,然后在JFrame
上添加面板
JPanel panel=new JPanel();
panel.add(button1);
panel.add(button2);
frame.add(panel);
您还可以设置按钮的对齐方式
JPanel panel=new JPanel(new FlowLayout(FlowLayout.RIGHT));
或者,您可以定义它们之间的水平/垂直间隙
JPanel panel=new JPanel(new FlowLayout(FlowLayout.RIGHT,10,10));
最后,有关示例的详细信息,请阅读。JFrame的默认布局管理器是BorderLayout,如果未指定,则默认情况下会将组件添加到BorderLayout.CENTER。由于它们都被添加到中心,一个正在掩盖另一个。您需要为其中一个指定框架上的位置,或者使用其他布局管理器
另外(这与问题无关)您可以对两个按钮使用相同的侦听器,您可以使用if语句检查事件的来源,并基于此进行不同的处理。JFrame的默认布局管理器是BorderLayout,如果未指定,则默认情况下会将组件添加到BorderLayout.CENTER。由于它们都被添加到中心,一个正在掩盖另一个。您需要为其中一个指定框架上的位置,或者使用其他布局管理器
另外(这与问题无关)您可以对两个按钮使用相同的侦听器,您可以使用if语句来检查事件的来源,并在此基础上对其进行不同的处理。请参见您有两个按钮,即
按钮1
和按钮2
,因此,如果您使用的是setbound属性,则使用“使用绝对定位”将控件以这种方式放置在帧上
JFrame frame = new JFrame();
Container Pane = getContentPane();
Pane.setLayout(null);
JButton button1 = new JButton("Click me!");
JButton button2 = new JButton("Click me too!");
Pane.add(Button1);
Pane.add(Button2);
Insets insets = Pane.getInsets();
Dimension size = Button1.getPreferredSize();
Button1.setBounds(10 + insets.left, 10 + insets.top,size.width, size.height); //use your own constants
size = Button2.getPreferredSize();
Button2.setBounds(75 + insets.left, 5 + insets.top,size.width, size.height + 8);
尽量避免使用它,因为它只会使代码变得冗长,而不是使用java内置布局,如FlowLayout、BorderLayout、GridBagLayout等。请在此处查找更多详细信息
请参见,您有两个按钮,即
按钮1
和按钮2
,因此,如果您使用的是setbound属性,则使用“使用绝对定位”将控件以这种方式放置在框架上
JFrame frame = new JFrame();
Container Pane = getContentPane();
Pane.setLayout(null);
JButton button1 = new JButton("Click me!");
JButton button2 = new JButton("Click me too!");
Pane.add(Button1);
Pane.add(Button2);
Insets insets = Pane.getInsets();
Dimension size = Button1.getPreferredSize();
Button1.setBounds(10 + insets.left, 10 + insets.top,size.width, size.height); //use your own constants
size = Button2.getPreferredSize();
Button2.setBounds(75 + insets.left, 5 + insets.top,size.width, size.height + 8);
尽量避免使用它,因为它只会使代码变得冗长,而不是使用java内置布局,如FlowLayout、BorderLayout、GridBagLayout等。请在此处查找更多详细信息
不要使用
setBounds
,像素完美的布局在现代UI设计中是一种错觉,字体、DPI、渲染管道等其他元素不会影响给定组件需要正确渲染的空间大小,相反,请使用适当的布局管理器,像GridLayout
或gridbagloayout
不要使用setBounds
,像素完美的布局在现代UI设计中是一种错觉,你不需要字体,字体、DPI、渲染管道等其他元素会影响给定组件可能需要正确渲染的空间大小,使用适当的布局管理器,如GridLayout
或gridbagloayout
您的意思是这样的吗?我非常赞成用更现代的、更少的。。硬编码的方式做事情,但不幸的是,这是一个学校的作业,我们得到了模板代码。这是不幸的,但这是所有CS学生经常经历的事情。v@theGreenCabbage:是的,这就是我的建议。你得到的具体限制和模板是什么?好的,我知道了。我只是添加了一个GridLayout构造函数。Tha