StatCalculator2
아쉽게도.. 넣으려고 했던 물약과 각성 강화는 기술적 문제로 넣지 못했습니다. 이 부분은 ver3로 미뤘습니다
그래도 전 버전보다는 훨씬 실용성이 높아진 편입니다
솔직히 이번 소스코드는 gui를 배운사람이라도 워낙 스파게티 소스라서 이해를 못하실 겁니다. ㅋㅋ
|소스코드|
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class StatCalculator2 extends JFrame implements ActionListener{
double hp, atk, def, hpgem, atkgem, defgem, eval, stat;
JPanel Pnl1, Pnl2;
JLabel HP, ATK, DEF, HPGEM, ATKGEM, DEFGEM, EVAL, STAT, EVALP, STATP;
JTextField HPS, ATKS, DEFS, HPGEMS, ATKGEMS, DEFGEMS;
JButton Calculate, Clear;
TextArea Rec;
public StatCalculator2(){
setLayout(new BorderLayout());
Pnl1=new JPanel();
Pnl2=new JPanel();
Pnl1.setLayout(new GridLayout(6, 2));
Pnl2.setLayout(new GridLayout(3, 2));
HP=new JLabel("HP");
ATK=new JLabel("ATK");
DEF=new JLabel("DEF");
HPGEM=new JLabel("GEM");
ATKGEM=new JLabel("GEM");
DEFGEM=new JLabel("GEM");
EVAL=new JLabel("EVAL: ");
STAT=new JLabel("STAT: ");
EVALP=new JLabel();
STATP=new JLabel();
HP.setBackground(Color.YELLOW);
HP.setOpaque(true);
ATK.setBackground(Color.RED);
ATK.setOpaque(true);
DEF.setBackground(Color.BLUE);
DEF.setOpaque(true);
HPGEM.setBackground(Color.YELLOW);
HPGEM.setOpaque(true);
ATKGEM.setBackground(Color.RED);
ATKGEM.setOpaque(true);
DEFGEM.setBackground(Color.BLUE);
DEFGEM.setOpaque(true);
HPS=new JTextField();
ATKS=new JTextField();
DEFS=new JTextField();
HPGEMS=new JTextField();
ATKGEMS=new JTextField();
DEFGEMS=new JTextField();
Calculate=new JButton("Calculate");
Clear=new JButton("Clear");
Calculate.addActionListener(this);
Clear.addActionListener(this);
Rec=new TextArea();
// define
Pnl1.add(HP);
Pnl1.add(HPGEM);
Pnl1.add(HPS);
Pnl1.add(HPGEMS);
Pnl1.add(ATK);
Pnl1.add(ATKGEM);
Pnl1.add(ATKS);
Pnl1.add(ATKGEMS);
Pnl1.add(DEF);
Pnl1.add(DEFGEM);
Pnl1.add(DEFS);
Pnl1.add(DEFGEMS); // Pnl1
Pnl2.add(EVAL);
Pnl2.add(STAT);
Pnl2.add(EVALP);
Pnl2.add(STATP);
Pnl2.add(Calculate);
Pnl2.add(Clear); // Pnl2
// addItem
add(Pnl1, BorderLayout.NORTH);
add(Rec, BorderLayout.CENTER);
add(Pnl2, BorderLayout.SOUTH);
// add
setTitle("드빌 스텟 계산기 2");
setSize(500, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
// set
}
public static void main(String[] args) {
new StatCalculator2();
}
@Override
public void actionPerformed(ActionEvent e) {
Object bt=e.getSource();
if(bt==Calculate) {
try {
hp=Double.parseDouble(HPS.getText().toString());
atk=Double.parseDouble(ATKS.getText().toString());
def=Double.parseDouble(DEFS.getText().toString());
hpgem=Double.parseDouble(HPGEMS.getText().toString());
atkgem=Double.parseDouble(ATKGEMS.getText().toString());
defgem=Double.parseDouble(DEFGEMS.getText().toString());
}catch(NumberFormatException e1) {
System.out.println("NumberFormatException");
}finally {
eval=(hp+hpgem)+4*(atk+atkgem+def+defgem);
stat=(double)((hp+hpgem)/4+atk+atkgem+def+defgem);
EVALP.setText(""+eval);
STATP.setText(""+stat);
Rec.append((hp+hpgem)+" "+(atk+atkgem)+" "+(def+defgem)+" "+eval+" "+stat+" ");
} // Exception Handling
}else if(bt==Clear) {
HPS.setText("");
ATKS.setText("");
DEFS.setText("");
HPGEMS.setText("");
ATKGEMS.setText("");
DEFGEMS.setText("");
}
} // actionPerformed
}
|실행 화면|
위 화면은 드래곤의 기본 스탯을 계산하는 화면입니다. 추가된 것들은 GEM입력칸과 텍스트 에어리어, 그리고 Clear 버튼이 있죠
(위 화면에서 문제는 사용자가 젬의 입력을 원하지 않아 젬을 입력하지 않았는데도, 예외처리 부분에서 NumberFormatException이
발생하다록 설정했다는 것입니다..)
다음과 같이 젬을 입력하면 젬까지 포함해서 eval과 stat을 계산합니다. 그리고 텍스트 에어리어에 스탯이 기록되는 것들이 보이시죠?
그리고 텍스트 에어리어의 특성상, 다음과 같이 내용을 수정 가능합니다.
그리고, Ctrl+A, Ctrl+C로 전체 내용을 복사할 수도 있습니다!
마지막으로 Clear 버튼을 누르면 위 텍스트필드에 입력되어 있던 수들이 모두 초기화됩니다!
다음 버전3에서는 각성 강화와 여러 물약들과 여러 편의기능들을 더 추가해보겠습니다.
코드 지적 받고 문제시 글삭하겠습니다.