Java 单选按钮事件处理程序

Java 单选按钮事件处理程序,java,eventhandler,Java,Eventhandler,我在一个java项目上遇到了一些问题。我已经制作了一个空的GUI界面,现在我需要向它添加一些功能。然而,我被困在如何去做这件事上。基本布局有4个单选按钮:矩形、长方体、圆形和圆柱体。我有一个组面板,它有4个单独的面板,每个面板都有文本框,带有用于输入高度、长度、宽度和半径的标签。下面是它的外观:。根据选择的单选按钮,某些不需要的框应该隐藏。例如,如果选择“矩形”,则只有“长度”和“宽度”框才可见 显示所有内容的主框架如下所示: import javax.swing.JFrame; import

我在一个java项目上遇到了一些问题。我已经制作了一个空的GUI界面,现在我需要向它添加一些功能。然而,我被困在如何去做这件事上。基本布局有4个单选按钮:矩形、长方体、圆形和圆柱体。我有一个组面板,它有4个单独的面板,每个面板都有文本框,带有用于输入高度、长度、宽度和半径的标签。下面是它的外观:。根据选择的单选按钮,某些不需要的框应该隐藏。例如,如果选择“矩形”,则只有“长度”和“宽度”框才可见

显示所有内容的主框架如下所示:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import java.awt.Font;

public class GUIFrame extends JFrame
{
    //private final BorderLayout layout;
    private final FlowLayout layout;
    private final JLabel lblTitle;
    private final JButton btnProc;

    public GUIFrame()
    {

        super("GUI Layout");
        Font titleFont = new Font("Verdana", Font.BOLD, 26);

        btnProc = new JButton("Click to Process");
        lblTitle = new JLabel("Figure Center");
        lblTitle.setFont(titleFont);
        widthPanel myWidth = new widthPanel();
        myWidth.setLocation(0, 400);
        lengthPanel myLength = new lengthPanel();
        heightPanel myHeight = new heightPanel();
        radiusPanel myRadius = new radiusPanel();
        radioButtonPanel myButtons = new radioButtonPanel();

        //layout = new BorderLayout(3, 2);
        layout = new FlowLayout();

        JPanel txtGroup = new JPanel();
        txtGroup.setLayout(new GridLayout(2, 2));
        txtGroup.add(myWidth);
        txtGroup.add(myLength);
        txtGroup.add(myRadius);
        txtGroup.add(myHeight);
        setLayout(layout);

        add(lblTitle);
        add(myButtons);
        add(txtGroup);
        add(btnProc);


        if(myButtons.btnRectangle.isSelected())
        {
            myHeight.setVisible(false);
            myRadius.setVisible(false);
        }

    }

    private class RadioButtonHandler implements ItemListener
    {
        @Override
        public void itemStateChanged(ItemEvent event)
        {

        }
    }

}
我可以使用if语句来实现这一点,但我应该使用事件处理程序,我不知道如何编写代码使其正常工作

如果有帮助,下面是按钮面板的代码:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.JLabel;
import java.awt.GridLayout;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;


public class radioButtonPanel extends JPanel
{
    private final JRadioButton btnRectangle;
    private final JRadioButton btnBox;
    private final JRadioButton btnCircle;
    private final JRadioButton btnCylinder;
    private final ButtonGroup radioButtonGroup;
    private final JLabel label;
    private final JPanel radioPanel;


    public radioButtonPanel()
    {
        radioPanel = new JPanel();
        radioPanel.setLayout(new GridLayout(5,1));

        btnRectangle = new JRadioButton("Rectangle", true);
        btnBox = new JRadioButton("Box", false);
        btnCircle = new JRadioButton("Circle", false);
        btnCylinder = new JRadioButton("Cylinder", false);
        label = new JLabel("Select A Figure:");
        radioPanel.add(label);
        radioPanel.add(btnRectangle);
        radioPanel.add(btnBox);
        radioPanel.add(btnCircle);
        radioPanel.add(btnCylinder);

        radioButtonGroup = new ButtonGroup();
        radioButtonGroup.add(btnRectangle);
        radioButtonGroup.add(btnBox);
        radioButtonGroup.add(btnCircle);
        radioButtonGroup.add(btnCylinder);


        add(radioPanel);


    }

}
以及其中一个面板的样本。它们都遵循相同的设置,只是变量名不同

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPanel;
import java.awt.GridLayout;

public class heightPanel extends JPanel
{
    private final JLabel lblHeight;
    private final JTextField txtHeight;
    private final JPanel myHeight;

    public heightPanel()
    {
        myHeight = new JPanel();
        myHeight.setLayout(new GridLayout(2,1));

        lblHeight = new JLabel("Enter Height:");
        txtHeight = new JTextField(10);
        myHeight.add(lblHeight);
        myHeight.add(txtHeight);


        add(myHeight);
    }
}

下面的代码应该为您快速介绍如何为按钮组(
JRadioButtons
)使用事件侦听器/处理程序

但是我应该使用事件处理程序,我不知道如何使用它 对其进行编码以使其正常工作

根据所选的单选按钮,某些框 不需要的东西应该隐藏起来。例如,如果选择了矩形, 只有长度和宽度框才可见

//要隐藏
JTextFields
请使用
void setVisible(布尔可见)
方法。如果要隐藏
JTextField
,则应将
false
作为参数传递给该方法

示例:

 btnRectangle.addActionListener(new ActionListener() {
       @Override
        public void actionPerformed(ActionEvent e) {
           if(e.getSource() == btnRectangle){
              TextFieldName.setVisible(false); // set the textfields that you want to be hidden once the Rectangle button is chosen.
           }
        }
 });

您错误地指定了
radioButtonPanel
来代替主框架类,您能修复它吗?不知道我这么做了。修好了。我想我会注意的,但让我确定一下。在if语句中,e.getSource()检测选择了哪个单选按钮,并调用我想要false的字段的setVisible属性来隐藏它们。现在,actionPerformed是一个捕获更改的通用函数,还是应该用更具体的东西(如itemStateChanged)来替换它?我应该为每个按钮创建一个ActionListener,还是使用一系列if语句来处理不同的按钮来创建一个ActionListener?从示例的外观来看,我猜每个按钮都有自己的ActionListener?是的,每个按钮都有自己的ActionListener,请查看oracle java参考页以获取进一步的帮助。此外,如果答案对您有所帮助,如果您将答案标记为已接受,我将不胜感激。谢谢。是的,谢谢你!你帮了大忙。选中时,单选按钮将隐藏相应的框。我只需要让“进程”按钮工作一下,我想先自己试试。@Wildfire44601很高兴知道,祝你好运!。如果您需要任何帮助,请随时与我联系。;)
 btnRectangle.addActionListener(new ActionListener() {
       @Override
        public void actionPerformed(ActionEvent e) {
           if(e.getSource() == btnRectangle){
              TextFieldName.setVisible(false); // set the textfields that you want to be hidden once the Rectangle button is chosen.
           }
        }
 });