为什么JOptionpanes没有出现?

问题描述

我已经创建了一个JComboBox,并希望当在框中选择某个项目时,出现相应的ConfirmDialogs / MessageDialogs。我做错了什么?因为不幸的是,当我单击按钮“ okBtn”时,什么也没有发生:/ 我已经尝试了很多东西,但不幸的是,我仍然受困,希望得到任何帮助(: 我的代码

import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MusicGenre extends JFrame {

    String MusicGenre[] = {"Lo-Fi","Future-House","Deep-House","Anderes"};

    public MusicGenre() {

        setTitle("Genre-Auswahl");
        setSize(250,250);
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4,2));

        JLabel frage = new JLabel("An welches Genre denkst du?");
        panel.add(frage);

        JComboBox genreAuswahl = new JComboBox(MusicGenre);
        panel.add(genreAuswahl);

        JButton okBtn = new JButton("Okay");
        okBtn.setBackground(Color.BLACK);
        okBtn.setForeground(Color.GREEN);
        okBtn.setBorder(new LineBorder(Color.RED));
        okBtn.setopaque(true);

        JButton backBtn = new JButton("Zurück");
        backBtn.setBackground(Color.BLACK);
        backBtn.setForeground(Color.RED);
        backBtn.setBorder(new LineBorder(Color.RED));
        backBtn.setopaque(true);


        okBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {

               if (genreAuswahl.equals("Lo-Fi")){
                   int lofi = JOptionPane.showConfirmDialog(null,"Produzierst du selber Musik?");
                   if (lofi == JOptionPane.YES_OPTION){
                       JOptionPane.showMessageDialog(null,"Meine Idee: Erstelle einen Lo-Fi Beat");
                       System.exit(0);
                   }else {
                       JOptionPane.showMessageDialog(null,"Meine Idee: Hör dir Lo-Fi an");
                       System.exit(0);
                   }
                   if (genreAuswahl.equals("Future-House")){
                       int fh = JOptionPane.showConfirmDialog(null,"Produzierst du selber Musik?");
                       if (fh == JOptionPane.YES_OPTION){
                           JOptionPane.showMessageDialog(null,"Meine Idee: Erstelle einen Future-House Beat");
                       }else {
                           JOptionPane.showMessageDialog(null,"Meine Idee: Hör dir Future-House an");
                       }
                       if (genreAuswahl.equals("Deep-House")){
                           int dh = JOptionPane.showConfirmDialog(null,"Produzierst du selber Musik?");
                           if (dh == JOptionPane.YES_OPTION){
                               JOptionPane.showMessageDialog(null,"Meine Idee: Erstelle einen Deep-House Beat");
                           }else {
                               JOptionPane.showMessageDialog(null,"Meine Idee: Hör dir Deep-House an");
                           }
                           if (genreAuswahl.equals("Anderes")){
                               int other = JOptionPane.showConfirmDialog(null,"Produzierst du selber Musik?");
                               if (other == JOptionPane.YES_OPTION){
                                   JOptionPane.showMessageDialog(null,"Meine Idee: Erstelle Musik deiner Wahl");
                               }else {
                                   JOptionPane.showMessageDialog(null,"Hör dir Musik deiner Wahl an");
                               }
                           }
                       }
                   }
               }
            }
        });


        backBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                dispose();
            }
        });

        panel.add(okBtn);
        panel.add(backBtn);

        add(panel);
        setVisible(true);
    }
}

解决方法

在if语句中,而不是像在代码中那样将JComboBox对象与字符串进行比较,如下所示:

7

比较实际选择的项目(它是一个String对象):

genreAuswahl.equals("Lo-Fi")

如果其他控件也可以这样做,则您的代码应该可以按预期工作。我在本地尝试过并为我工作。

任何if语句都不起作用的原因是JComboBox永远不能等于String对象。