2011-02-10 5 views
-1

숙제로이 프로그램을 만들었으므로 하나의 GUI 선택 항목을 다른 것에 추가해야합니다.GUI 프로그램을 만들었지 만 이상한 오류가 발생했습니다.

2 가지 선택 사항의 합계가 학기당 총 비용 버튼에 표시되지 않습니다. 액션 리스너에서

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

/** 

     The Main class creates the GUI for the Dorm and 
     Meal charges. 
*/ 

public class Main extends JFrame 
{ 
private JPanel dormPanel; 
private JComboBox dormBox; 
private JPanel mealPanel; 
private JComboBox mealBox; 
private JPanel totalChargesPanel; 
private JPanel selectedMealPanel; 
private JPanel buttonPanel; 
private JButton calcButton; 
private JLabel label1; 
private JTextField totalCharges; 

private String[] dorm = { "Allen Hall: $1,500 per semester", 
     "Pike Hall: $1,600 per semester", 
     "Farthing Hall: $1,200 per semester", 
"University Suites: $1,800 pe r semester"}; 

private String[] meal = { "7 meals per week: $650 per semester", 
     "14 meals per week: $1,095 per semester", 
"Unlimited meals: $1,500 per semester"}; 

/** 
    Constructor 
*/ 
public Main() 
{ 
    super("Dormitory and Meal Plan"); 

    // Specify an action for the close button. 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    // Create a BorderLayout manager. 
    setLayout(new BorderLayout()); 

    // Create the dorm and meal panel.  
    buildDormPanel(); 
    buildMealPanel(); 
    buildSelectedTotalChargesPanel(); 
    buildButtonPanel(); 

    // Add the components to the content pane. 
    add(dormPanel, BorderLayout.WEST); 
    add(mealPanel, BorderLayout.EAST); 
    add(totalChargesPanel, BorderLayout.SOUTH); 
    add(buttonPanel, BorderLayout.NORTH); 

    // Pack the contents of the window and display it.  
    pack(); 
    setVisible(true); 
} 

// The buildDormPanel method builds the dorm panel. 
private void buildDormPanel() 
{ 
    // Create the dorm panel.  
    dormPanel = new JPanel(); 
    dormBox = new JComboBox(dorm); 

    // Register the action listener.  
    dormBox.addActionListener(new ComboBoxListener()); 

    // Add the dorm panel to the panel. 
    dormPanel.add(dormBox); 
} 

// The buildMealPanel method builds the meal panel. 
private void buildMealPanel() 
{ 
    // Create the meal panel.  
    mealPanel = new JPanel(); 
    mealBox = new JComboBox(meal); 

    // Register the action listener. 
    mealBox.addActionListener(new ComboBoxListener()); 

    // Add the meal panel to the panel. 
    mealPanel.add(mealBox); 
} 

// The buttonPanel method builds the bottun panel. 
private void buildButtonPanel() 
{ 
    // Create a panel. 
    buttonPanel = new JPanel(); 

    // Create a button. 
    calcButton = new JButton("Calculate"); 

    // Register an action listener with the button. 
    calcButton.addActionListener(new ButtonListener()); 

    // Add the button to the panel. 
    buttonPanel.add(calcButton); 
} 

// The buildSelectedDormPanel builds the selected totalCharges panel. 
private void buildSelectedTotalChargesPanel() 
{ 
    // Create the totalChargesPanel for the label.  
    totalChargesPanel = new JPanel(); 
    label1 = new JLabel("Total charges per semester: "); 

    // Create the totalCharges textfield.   
    totalCharges = new JTextField (25); 
    totalCharges.setEditable(false); 

    // Add the totalChargesPanel to the panel.  
    totalChargesPanel.add(label1); 
    totalChargesPanel.add(totalCharges); 
} 

/** Private inner class that handles the event when the user 
    selects the dorm and meal boxes. 
*/ 
private class ComboBoxListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     // Variables to hold the dorm, meal, and total charges.   
     String dorm = (String) dormBox.getSelectedItem(); 
     String meal = (String) mealBox.getSelectedItem(); 

     // Calculates the total. 
     totalCharges.setText(meal + dorm); 
    } 
} 

private class ButtonListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     // Add code below 
    } 
} 

public static void main(String[] args) 
{ 
    new Main(); 
} 
} 
+0

콤보 상자에서 아무것도 선택하지 않습니까? –

+0

'$ DEITY'를 좋아하기 때문에, 특히 프로그램 전체를 질문에 덤프하려고한다면, [코드를 읽을 수 있도록 포맷하십시오] (http://stackoverflow.com/editing-help)하시기 바랍니다. –

+1

'하나의 GUI가 다른 것을 선택합니다'는 의미는 무엇입니까? – Falmarri

답변

2

나는 다음과 같은 코드를 찾을 :

// Variables to hold the dorm, meal, and total charges.   
String dorm = (String) dormBox.getSelectedItem(); 
String meal = (String) mealBox.getSelectedItem(); 

// Calculates the total. 
totalCharges.setText(meal + dorm); 

당신은 각 콤보 상자에서 문자열을 읽고 다음 합계를 계산하려고합니다. 불행히도 meal+dorm이라는 용어는 문자열에 적용 할 경우 추가가 아니라 문자열 연결을 의미합니다.

이 문제를 해결하려면 comboboxes의 각 항목에 대한 표시 텍스트 + 값을 저장하는 적절한 데이터 구조를 선택한 다음 actionlistener에서 총 값을 계산 한 후이 총계를 텍스트 형식으로 다시 입력하십시오.

관련 문제