2016-11-20 14 views
0

내가 선택한 모든 확인란의 총계를 계산하려면 어떻게합니까?선택한 체크 박스를 기준으로 총 금액을 합계하는 방법

public class Frame extends JFrame implements ItemListener{ 
    JLabel lbl1=new JLabel("SERVICES"); 
    JLabel price1=new JLabel("100.00"); 
    JLabel price2=new JLabel("200.00"); 
    JLabel price3=new JLabel("300.00"); 


    JCheckBox haircut=new JCheckBox("Hair Cut"); 
    JCheckBox fullcolor=new JCheckBox("Full Color"); 
    JCheckBox hairrebond=new JCheckBox("Hair Rebond"); 


    JPanel first = new JPanel(); 
    JPanel second= new JPanel(); 
    JPanel third = new JPanel(); 
    double price,total; 

public Frame(){ 

    FlowLayout flow = (new FlowLayout(FlowLayout.LEFT, 30,30)); 
    add(lbl1); 
    first.add(hairrebond); 
    first.add(price1); 
    second.add(haircut); 
    second.add(price2); 
    third.add(fullcolor); 
    third.add(price3); 

    add(first); 
    add(second); 
    add(third); 


    setLayout(flow); 
    setVisible(true); 
    setSize(600,600); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

@Override 
public void itemStateChanged(ItemEvent e) { 

    if(hairrebond.isSelected()==true){ 

     price=100; 
     total += price; 

    } 

    if(fullcolor.isSelected()==true){ 

     price=400; 
     total += price; 

    }if(haircut.isSelected()==true){ 

     price=500; 
     total += price; 

    } 

    } 

    public static void main(String args[]){ 

    Frame one = new Frame(); 

}} 
+0

문제점 : itemchange listener를 추가하지 않으셨습니까? –

+0

true 또는 false boolean 값을 반환하는 isSelected()를 호출하면 조건이 true이면 명령문이 실행되므로 == true를 지정하면 실제로 시간 낭비입니다. 더 좋은 방법은''if (fullcolor.isSelected()) {// do stuff}''자바 명명 규칙 (변수 이름, 클래스 이름 등)이 될 것입니다. 코드 가독성 [여기 명명 규칙을 참조하십시오] (http://www.javatpoint.com/java-naming-conventions) – Chains

+0

리스너가 호출되지 않은 이유는 무엇입니까? 그렇다고 생각합니다. 실제로 네가 itemListener를 구현 했으므로 실제로 추가하지 않았기 때문입니다. "haircut.addItemListener (this);" – Chains

답변

0

이 코드를 사용해보십시오. Key는 itemStateChanged 메서드 내에서 지역 변수를 사용하는 것입니다.

import java.awt.FlowLayout; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Frame extends JFrame implements ItemListener { 

    JLabel lbl1 = new JLabel("SERVICES"); 
    JLabel price1 = new JLabel("100.00"); 
    JLabel price2 = new JLabel("200.00"); 
    JLabel price3 = new JLabel("300.00"); 

    JCheckBox haircut = new JCheckBox("Hair Cut"); 
    JCheckBox fullcolor = new JCheckBox("Full Color"); 
    JCheckBox hairrebond = new JCheckBox("Hair Rebond"); 

    JPanel first = new JPanel(); 
    JPanel second = new JPanel(); 
    JPanel third = new JPanel(); 
    double price, total; 

    public Frame() { 

     FlowLayout flow = (new FlowLayout(FlowLayout.LEFT, 30, 30)); 
     add(lbl1); 
     first.add(hairrebond); 
     first.add(price1); 
     second.add(haircut); 
     second.add(price2); 
     third.add(fullcolor); 
     third.add(price3); 

     add(first); 
     add(second); 
     add(third); 

     setLayout(flow); 
     setVisible(true); 
     setSize(600, 600); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     haircut.addItemListener(this); 
     fullcolor.addItemListener(this); 
     hairrebond.addItemListener(this); 
    } 

    @Override 
    public void itemStateChanged(ItemEvent e) { 
     int sum = 0; 
     if (hairrebond.isSelected() == true) { 
      sum += 100; 

     } 

     if (fullcolor.isSelected() == true) { 
      sum += 300; 
     } 
     if (haircut.isSelected() == true) { 
      sum += 200; 
     } 

     total = sum; 
     System.out.println(total); 

    } 

    public static void main(String args[]) { 

     Frame one = new Frame(); 

    } 
} 
+0

나는 그의 원래 접근 방식도 괜찮 았다고 말했을 것이다. 문제는 그가 청취자를 추가하지 않았고, 둘 다 null이 될 때 그는 + =를 호출합니다. 생성자 또는 기타에서 total = 0.0으로 수정 될 수 있습니다. – Chains