📄 skillpanel.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 + -