我有一个学校作业将GUI计算器从RadioButton更改为JComboBox。我做了改变,但我有一些问题。 第一个是出于某种原因,当我选择计算时,它不起作用 我需要在从JComboBox中选择选项后直接计算它。 我必须使用选定的Index方法作为赋值的一部分。 这是我的代码:
<code>
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
public class TaschenrechnerGUIV2 extends JFrame{
private static final long serialVersionUID = 3006212012028893840L;
private JTextField eingabe1, eingabe2;
double x, y, ergebnis = 0;
String [] option = {"addition", "subtraktion", "multiplikation", "division"};//array JList
private JComboBox <String> optionComboBox = new JComboBox <String>(option);//need to import the JComboBox
private JButton schaltflaecheBerechnen, schaltflaecheBeenden;
private JLabel ausgabe;
class MeinListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("ende"))
System.exit(0);
if (e.getActionCommand().equals("rechnen"))
ausgabe.setText(berechnen());
if (e.getSource() instanceof JComboBox){
ausgabe.setText(berechnen());
}
}
}
public TaschenrechnerGUIV2(String titel) {
super(titel);
JPanel panelEinAus, panelBerechnung, panelButtons, gross;
panelEinAus = panelEinAusErzeugen();
panelBerechnung = panelBerechnungErzeugen();
panelButtons = panelButtonErzeugen();
gross = new JPanel();
gross.add(panelEinAus);
gross.add(panelBerechnung);
add(gross,BorderLayout.CENTER);
add(panelButtons, BorderLayout.EAST);
optionComboBox.setEnabled(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
setResizable(false);
setLocationRelativeTo(null);
}
private JPanel panelEinAusErzeugen() {
JPanel tempPanel = new JPanel();
eingabe1 = new JTextField(10);
eingabe2 = new JTextField(10);
ausgabe = new JLabel("");
tempPanel.setLayout(new GridLayout(0,2,10,10));
tempPanel.add(new JLabel("Zahl 1:"));
tempPanel.add(eingabe1);
tempPanel.add(new JLabel("Zahl 2: "));
tempPanel.add(eingabe2);
tempPanel.add(new JLabel("Ergebnis: "));
tempPanel.add(ausgabe);
tempPanel.setBorder(new TitledBorder("Ein- und Ausgabe"));
return tempPanel;
}
private JPanel panelBerechnungErzeugen() {
JPanel tempPanel = new JPanel();
tempPanel.add(optionComboBox);//add the JComboBox to the panel
tempPanel.setLayout(new GridLayout(0,1));
tempPanel.setBorder(new TitledBorder("Operation: "));
return tempPanel;
}
private JPanel panelButtonErzeugen() {
JPanel tempPanel = new JPanel();
schaltflaecheBeenden = new JButton(" Beenden ");
schaltflaecheBeenden.setActionCommand("ende");
schaltflaecheBerechnen = new JButton("Berechnen");
schaltflaecheBerechnen.setActionCommand("rechnen");
tempPanel.setLayout(new GridLayout(0,1));
tempPanel.add(schaltflaecheBerechnen);
tempPanel.add(new JLabel());
tempPanel.add(schaltflaecheBeenden);
MeinListener listener = new MeinListener();
schaltflaecheBeenden.addActionListener(listener);
schaltflaecheBerechnen.addActionListener(listener);
optionComboBox.addActionListener(listener);//adding a listener to the JComboBox
return tempPanel;
}
private String berechnen() {
double x, y, ergebnis = 0;
boolean fehlerFlag = false;
try {
x = Double.parseDouble(eingabe1.getText());
}
catch (Exception NumberFormatException) {
fehlermeldung(eingabe1);
return ("Nicht definiert");
}
try {
y = Double.parseDouble(eingabe2.getText());
}
catch (Exception NumberFormatException) {
fehlermeldung(eingabe2);
return ("Nicht definiert");
}
if (optionComboBox.getSelectedIndex() ==0){
ergebnis = x + y;
}
if (optionComboBox.getSelectedIndex() ==1){
ergebnis = x - y;
}
if (optionComboBox.getSelectedIndex() ==2){
ergebnis = x * y;
}
if (optionComboBox.getSelectedIndex() ==3){
if(y !=0)
ergebnis = x / y;
}
else
fehlerFlag = true;
if (fehlerFlag == false) {
DecimalFormat formatFolge = new DecimalFormat("0.##");
return (formatFolge.format(ergebnis));
}
else return ("Nicht definiert"); }
private void fehlermeldung(JTextField eingabefeld) {
JOptionPane.showMessageDialog(this, "Ihre Eingabe ist nicht gültig","Eingabefehler", JOptionPane.ERROR_MESSAGE);
eingabefeld.requestFocus();
}
public static void main (String [] arg){
new TaschenrechnerGUIV2("Taschenrechner V2"); }}
</code>
答案 0 :(得分:2)
您忘记包含 ActionListener 应该收听的内容。 zB。
object set = e.getSorce();
if(set instanceof JComboBox){
if (optionComboBox.getSelectedIndex() ==0){
ergebnis = x + y;
}
if (optionComboBox.getSelectedIndex() ==1){
ergebnis = x - y;
}
if (optionComboBox.getSelectedIndex() ==2){
ergebnis = x * y;
}
if (optionComboBox.getSelectedIndex() ==3){
if(y !=0)
ergebnis = x / y;
}
}