我是Java和OOPS的初学者。我正在Head First Java中开始学习,并在其中学习GUI和Swing概念。 以下代码仅用于理解目的。
在运行代码时,框架窗口显示为Button,当我展开它时,我也可以看到单选按钮。
问题 -
我正在使用鼠标更改窗口大小。
即使我将帧大小设置为多于按钮。比如frame.setSize(800,800);然后按钮覆盖整个contentPane。并且在调整大小时仍然表现相同。
按钮响应单击鼠标,无论我在contentPane中单击何处。只有当我直接点击按钮时它才会响应。
请告诉我为什么这样做。
如果可能,请更正代码或添加内容以纠正此问题。
import java.awt.Color;
import javax.swing.*;
import java.awt.event.*;
public class Test1 implements ActionListener {
JFrame frame = new JFrame("Frame");
JButton button = new JButton("Button!");
JRadioButton radio = new JRadioButton("VideoKilledTheRadioStar!",true);
int j=0;
public static void main(String[] args) {
Test1 t = new Test1();
t.method1();
}
public void method1()
{
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.setSize(100,100);
button.setBackground(Color.ORANGE);
frame.add(button);
frame.setSize(100,100);
frame.setVisible(true);
button.addActionListener(this);
frame.getContentPane().add(radio);
radio.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{j++;
button.setText("clicked .. " + j);
if(button.getBackground()==Color.ORANGE)
button.setBackground(Color.BLUE);
else
button.setBackground(Color.ORANGE);
}
}
P.S我不知道哪个代码段对这个问题很重要或更相关,所以我已经提供了完整的代码。
答案 0 :(得分:3)
您在JButton
位置添加了button
JRadioButton
和BorderLayout.CENTER
,因此只显示了一个。此位置的组件将在X和Y轴上调整大小。
JButton
仅在光标位于其上时显示,因为它有自己的MouseListener
用于绘画。
此外,陈述
frame.add(myComponent);
和
frame.getContentPane().add(myComponent);
将组件添加到框架的ContentPane
&是等价的,但第一个是为方便起见。
请注意,组件不能在BorderLayout
中的同一位置共存。您可以将button
置于BorderLayout.SOUTH
位置(并直接添加到相框中):
frame.add(radio, BorderLayout.SOUTH);
BorderLayout
忽略了组件的所有首选大小,因此您必须使用其他布局管理器(例如BoxLayout
)来维护固定大小JButton
。
详细了解Layout Managers
答案 1 :(得分:3)
您正尝试在JButton
的默认布局(JRadioButton
)中添加BorderLayout
按钮和JFrame
个对象。
当您将组件添加到具有BorderLayout
的JFrame组件时,组件位于中间区域,BorderLayout
中心区域倾向于占据整个空间,因此要正确定位元素,您需要指定location以及设置组件的PreferredSize。
frame.add(radio, BorderLayout.SOUTH);
component.setPreferredSize(Dimension);