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