⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skillpanel.java

📁 java learn PPT java learn PPT java learn PPT java learn PPT
💻 JAVA
字号:
     import java.awt.*;
     import java.awt.event.*;

     // 提供一个可以修改技能值的按钮Represents a button capable of adjusting the value of a skill
     class SkillButton extends Button
     {
          // 显示给技能分配点的Label
          private Label pointsAllocated;
 
          public SkillButton(String desc, Label label)
          {
               super(desc);
               pointsAllocated = label;
          }

          // 从 Label解析点值
          public int getPointsAllocated()
          {
               return Integer.parseInt(pointsAllocated.getText());
          }

          // 更新总分配点标签
          private void allocatePoints(int n)
          {
               int value = getPointsAllocated() + n;
               pointsAllocated.setText("" + value);
          }

          // 更新父属性的值
          public int update(
               int pointsRemaining  // 所剩余的所有点数
               )
          {
               // 如果是"+"则分配点数
               if(getLabel().equals("+"))
               {
                    // 只是在有点剩余时才分配
                    if(pointsRemaining > 0)
                    {                  
                         allocatePoints(1); 
                         return -1;
                    }
               }

               // 否则, 回收一个点
               else
               {
                    // 不允许分配值为负数
                    if(getPointsAllocated() > 0)
                    {
                         allocatePoints(-1);
                         return 1;
                    }
               }

               // 分配/回收失败
               return 0;
          }
     }                

     // 容纳不同角色的技能值
     public class SkillPanel extends AttributePanel implements ActionListener
     {
          // 每一项技能所分配的点数          
          Label[] pointsAllocated;

          // 剩余可分配的总点数
          Label pointsRemaining;

          // 这个applet的属性
          private String[] skills;

          public SkillPanel(String attr, String[] sk, int alloc)
          {
               super(attr);

               skills = sk;

               // 创建pointsRemaining 标签
               pointsRemaining = new Label("Points remaining: " + alloc, Label.CENTER);

               // 把 applet的layout设为 FlowLayout
               setLayout(new FlowLayout(FlowLayout.CENTER, 5, 10));

               // 添加组件
               pointsAllocated = new Label[skills.length];
               for(int i = 0; i < skills.length; i++)
               {
                    pointsAllocated[i] = new Label("0", Label.CENTER);
                    addSkill(skills[i], pointsAllocated[i]);
               }

               add(pointsRemaining);
          }
       
          private void addSkill(String skill, Label label)
          {
               Panel p = new Panel();

               // 设置面板布局为3x1 网格
               p.setLayout(new GridLayout(3, 1));

               p.setBackground(Color.GREEN.darker());
               
               // 添加一个描述属性的标签
               p.add(new Label(skill, Label.CENTER));
               p.add(label);
               
               // 把 +/- 按钮添加到父ActionListner
               Button incr = new SkillButton("+", label);
               incr.addActionListener(this);
               Button decr = new SkillButton("-", label);
               decr.addActionListener(this);

               // 添加另一个有加减按钮的Panel 
               Panel buttonPanel = new Panel();
               buttonPanel.add(incr);  
               buttonPanel.add(decr);
               p.add(buttonPanel);

               add(p);
          }

          public String toString()
          {
               // 返回一个包含每一种技能分配情况的String 
               String s = "";
               int points = 0;
               for(int i = 0; i < skills.length; i++)
               {       
                    points = Integer.parseInt(pointsAllocated[i].getText());
                    s = s + skills[i] + " (" + points + ")    ";
               }

               return s;
          }

          public void actionPerformed(ActionEvent e)
          {
               // 得到可分配的点数
               int n = Integer.parseInt(pointsRemaining.getText().substring(18));

               // 更新按钮的面板的主标签
               n += ((SkillButton)e.getSource()).update(n);
               pointsRemaining.setText("Points remaining: " + n);
          } 

     }    // SkillPanel

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -