我正在尝试使用JCheckBox
创建角色创建者。我创建了所有类,但是,当将每个类扩展到下一个类时,我无法看到前一个类的返回结果。例如,我有一个Gender
类和一个Race
类。 Gender
类有两个复选框,一个用于男性,一个用于女性。本课程本身就可以使用。但是,当我使用Race
类扩展Gender
类时,所有内容都会显示,但单击这些框不会输出到JTextField
。以下是我的Gender
和Race
的代码。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Gender extends JFrame implements ItemListener
{
FlowLayout flow = new FlowLayout();
JLabel label = new JLabel("What gender would you like to be?");
JCheckBox male = new JCheckBox("Male", false);
JCheckBox female = new JCheckBox("Female", false);
JTextField GENDER = new JTextField(12);
String output, insChosen;
String Gender = "";
public Gender()
{
super("Character Creation");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
label.setFont(new Font("Arial", Font.ITALIC, 15));
GENDER.setText("Gender" + Gender + ".");
male.addItemListener(this);
female.addItemListener(this);
add(label);
add(male);
add(female);
add(GENDER);
}
public void itemStateChanged(ItemEvent event)
{
Object source = event.getSource();
int selects = event.getStateChange();
if(male.isSelected())
Gender = "Male";
else
if(female.isSelected())
Gender = "Female";
GENDER.setText("Gender: " + Gender);
}
public static void main(String[] args)
{
final int FRAME_WIDTH = 300;
final int FRAME_HEIGHT = 600;
Gender frame = new Gender();
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setVisible(true);
}
}
这是Race的代码。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Race extends Gender
{
FlowLayout flow = new FlowLayout();
JLabel label = new JLabel("What race would you like to play as?");
JCheckBox elf = new JCheckBox("Elf", false);
JCheckBox troll = new JCheckBox("Troll", false);
JCheckBox human = new JCheckBox("Human", false);
JCheckBox dwarf = new JCheckBox("Dwarf", false);
JCheckBox orc = new JCheckBox("Orc", false);
JTextField RACE = new JTextField(12);
String output, insChosen;
String Race = "";
public Race()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
label.setFont(new Font("Arial", Font.ITALIC, 15));
RACE.setText("Race" + Race + ".");
elf.addItemListener(this);
troll.addItemListener(this);
human.addItemListener(this);
dwarf.addItemListener(this);
orc.addItemListener(this);
add(label);
add(elf);
add(troll);
add(human);
add(dwarf);
add(orc);
add(RACE);
}
public void itemStateChanged(ItemEvent event)
{
Object source = event.getSource();
int select = event.getStateChange();
if(elf.isSelected())
Race = "Elf";
else
if(troll.isSelected())
Race = "Troll";
else
if(human.isSelected())
Race = "Human";
else
if(dwarf.isSelected())
Race = "Dwarf";
else
if(orc.isSelected())
Race = "Orc";
RACE.setText("Race: " + Race);
}
public static void main(String[] args)
{
final int FRAME_WIDTH = 350;
final int FRAME_HEIGHT = 300;
Race frame = new Race();
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setVisible(true);
}
}
每项工作单独进行,但不会合作。任何帮助将不胜感激。
答案 0 :(得分:1)
因为您已覆盖itemStateChanged
Race
,Gender
继承自super.itemStateChanged
但未能调用Gender
,因此super.itemStateChanged(event);
不再调用Race
}。
将itemStateChanged
添加到public void itemStateChanged(ItemEvent event) {
super.itemStateChanged(event);
的{{1}}方法,例如:
JRadioButton
考虑使用ButtonGroup
s,通过使用JComboBox
为性别分组,因为它(通常)和/或选择,甚至是JFrame
,这将限制什么用户可以选择
我会避免直接从JPanel
延伸,因为您已经自动限制任何未来的扩展或使用该课程。
相反,请考虑使用Gender
。这意味着您不会“需要”从Race
延伸,但可以简单地“包含”在{{1}}类中。
我还鼓励您将模型/数据与UI本身分开,因此UI会修改模型并响应对模型所做的更改,但这只是我