通过多个类扩展JCheckbox

时间:2014-05-02 04:53:40

标签: java swing extends jcheckbox

我正在尝试使用JCheckBox创建角色创建者。我创建了所有类,但是,当将每个类扩展到下一个类时,我无法看到前一个类的返回结果。例如,我有一个Gender类和一个Race类。 Gender类有两个复选框,一个用于男性,一个用于女性。本课程本身就可以使用。但是,当我使用Race类扩展Gender类时,所有内容都会显示,但单击这些框不会输出到JTextField。以下是我的GenderRace的代码。

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);
   }

}

每项工作单独进行,但不会合作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

因为您已覆盖itemStateChanged RaceGender继承自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会修改模型并响应对模型所做的更改,但这只是我