2

一般来说,我是 Java 和 OOPS 的初学者。我正在学习 Head First Java 以开始,并研究其中的 GUI 和 Swing 概念。以下代码仅用于理解目的。

运行代码时,框架窗口显示为按钮,当我展开它时,我也可以看到单选按钮。

问题-

  1. 按钮工作直到窗口大小不超过按钮大小。一旦我增加窗口大小甚至比按钮的尺寸略大,那么只有当光标位于按钮上时才会显示按钮。

我正在使用鼠标更改窗口大小。

  1. 即使我将帧大小设置为大于按钮。说 frame.setSize(800,800); 然后按钮覆盖整个 contentPane。并且在调整大小时仍然表现相同。

  2. 无论我在 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);
}

}

PS我不知道哪段代码对这个问题更重要或更相关,所以我放了完整的代码。

4

2 回答 2

3

JButton您正在尝试JRadioButtonBorderLayout.JFrame

每当您将组件添加到 JFrame 时BorderLayout,组件位于中间部分,而BorderLayout中心部分倾向于占据整个空间,因此要正确定位元素,您需要指定位置并设置组件的 PreferredSize。

frame.add(radio, BorderLayout.SOUTH);
component.setPreferredSize(Dimension);
于 2012-12-24T11:33:12.520 回答
3

您在该位置添加JButton buttonJRadioButton两者,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

查看更多关于布局管理器的信息

于 2012-12-24T11:24:51.253 回答