我正在做一个GUI程序,但得到一个奇怪的错误

我正在做一个GUI程序,但得到一个奇怪的错误

问题描述:

我为我的作业做了这个程序,我必须添加一个GUI选择到另一个。我正在做一个GUI程序,但得到一个奇怪的错误

这两个选择的总和没有出现在每学期总费用按钮中。

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

你是否从组合框中选择了任何东西? – 2011-02-10 17:40:17

在你的动作监听我发现下面的代码:

// 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并不意味着添加如果应用于字符串,但字符串连接。

要解决此问题,您可以选择一个适当的数据结构,以保存组合框中每个条目的显示文本+值,然后计算actionlistener中的所有值的总数,然后再将此总数转换为文本格式。