Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 组合框:getSelectedIndex()在“重新选择”时行为不正常_Java_Swing_Jcombobox - Fatal编程技术网

Java 组合框:getSelectedIndex()在“重新选择”时行为不正常

Java 组合框:getSelectedIndex()在“重新选择”时行为不正常,java,swing,jcombobox,Java,Swing,Jcombobox,我的组合框的标识符是cmbYear 项目为1800、1801、1802、1803等。。。,2017年、2018年 然后我负责这个项目。当我在用户界面中选择1801时,getSelectedIndex返回控制台中打印的1,这是正确的 在同一次运行中,如果我再次选择1802,getSelectedIndex仍然返回1。在随后的每个选择中,getSelectedIndex返回1,即第一个选择的索引 从cmbYearActionPerformedjava.awt.event.ActionEvent ev

我的组合框的标识符是cmbYear

项目为1800、1801、1802、1803等。。。,2017年、2018年

然后我负责这个项目。当我在用户界面中选择1801时,getSelectedIndex返回控制台中打印的1,这是正确的

在同一次运行中,如果我再次选择1802,getSelectedIndex仍然返回1。在随后的每个选择中,getSelectedIndex返回1,即第一个选择的索引

从cmbYearActionPerformedjava.awt.event.ActionEvent evt方法调用getSelectedIndex

请问,我怎样才能纠正这种不良行为

下面是相关的行

 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package agecalcagain.UI;

import java.awt.event.ItemEvent;
import java.util.Calendar;
import javax.swing.JComboBox;

/**
 *
 * @author MuhammadRaselParvej
 */
public class AgeCalcAgain extends javax.swing.JFrame {

    private Integer[] yearList;
    private Integer[] dayList;
    private int selectedMonthIndex=0;
    private int selectedYearIndex=0;

    private void newMonthIndex(){
       selectedMonthIndex = cmbMonth.getSelectedIndex(); 
       System.out.println("Yes, new month :"+ String.valueOf(months[selectedMonthIndex]));
    }

    private void newYearIndex(){
        selectedYearIndex = cmbYear.getSelectedIndex();
        System.out.println("Yes, new year :"+ yearList[selectedYearIndex]);
    }

    int p=1;

    Calendar today = Calendar.getInstance();
    String months[] = new String[]{"January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"};
    String eras[] = new String[]{"BC", "AD"};

    /**
     * Creates new form AgeCalcAgain
     */
    private void updateYearList() {
        int n = today.get(Calendar.YEAR);
        n = n - 1800 + 1;
        yearList = new Integer[n];

        for (int i = 0; i < n; i++) {
            yearList[i] = 1800 + i;
        }
    }

    private void updateDayList() {
        System.out.println("In updateDayList **************** "+ p++);
        int n = yearList[selectedYearIndex];
        System.out.println("n "+n);
        n = n % 100 == 0 ? n / 100 : n;
        System.out.println("n "+n);
        int m;
        m = selectedMonthIndex;
        m++;
        System.out.println("m "+m);
        int numberOfDays = 28;
        if (m == 2 && n % 4 == 0) {
            numberOfDays++;
        } else if (m != 2) {
            numberOfDays += 2;
        }
        if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
            numberOfDays++;
        }
        dayList = new Integer[numberOfDays];
        for (int i = 0; i < numberOfDays; i++) {
            dayList[i] = i + 1;
        }
        System.out.println(numberOfDays);
    }

    private void createTempCmbMonth() {
        cmbMonth = new JComboBox<String>(months);
    }

    private void createTempCmbYear() {
        cmbYear = new JComboBox<>(yearList);
    }

    public AgeCalcAgain() {
        updateYearList();
        createTempCmbYear();
        createTempCmbMonth();
        updateDayList();
        myInitComponents();

        this.lbl01.setText("Today is " + today.get(Calendar.DATE) + " "
                + months[today.get(Calendar.MONTH)] + ", " + today.get(Calendar.YEAR) + " " + eras[today.get(Calendar.ERA)]);

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        lbl01 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        cmbDay = new javax.swing.JComboBox<>();
        cmbYear = new javax.swing.JComboBox<>();
        cmbMonth = new javax.swing.JComboBox<>();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(500, 500));
        setPreferredSize(new java.awt.Dimension(500, 500));
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        lbl01.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        lbl01.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lbl01.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createCompoundBorder(), javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createCompoundBorder(), javax.swing.BorderFactory.createCompoundBorder()), javax.swing.BorderFactory.createCompoundBorder())));
        getContentPane().add(lbl01, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 30, 270, 20));

        jLabel1.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Enter Your Birthdate");
        getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 70, 180, 20));

        jLabel2.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("Birthday");
        getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 200, 80, -1));

        jLabel3.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("Birthyear");
        getContentPane().add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 110, 80, 30));

        jLabel4.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setText("Birthmonth");
        getContentPane().add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 150, 80, 30));

        cmbDay.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        cmbDay.setModel(new javax.swing.DefaultComboBoxModel<>(dayList));
        cmbDay.setSelectedItem(1);
        cmbDay.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbDayActionPerformed(evt);
            }
        });
        getContentPane().add(cmbDay, new org.netbeans.lib.awtextra.AbsoluteConstraints(210, 200, 120, 30));

        cmbYear.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        cmbYear.setModel(new javax.swing.DefaultComboBoxModel<>(yearList));
        cmbYear.setSelectedItem(yearList[selectedYearIndex]);
        cmbYear.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmbYearItemStateChanged(evt);
            }
        });
        cmbYear.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbYearActionPerformed(evt);
            }
        });
        getContentPane().add(cmbYear, new org.netbeans.lib.awtextra.AbsoluteConstraints(210, 110, 120, 30));

        cmbMonth.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        cmbMonth.setModel(new javax.swing.DefaultComboBoxModel<>(months));
        cmbMonth.setSelectedItem(months[selectedMonthIndex]);
        cmbMonth.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmbMonthItemStateChanged(evt);
            }
        });
        cmbMonth.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbMonthActionPerformed(evt);
            }
        });
        cmbMonth.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                cmbMonthPropertyChange(evt);
            }
        });
        getContentPane().add(cmbMonth, new org.netbeans.lib.awtextra.AbsoluteConstraints(210, 150, 120, 30));

        pack();
    }// </editor-fold>                        

    private void myInitComponents() {

        lbl01 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        cmbDay = new javax.swing.JComboBox<>();
        cmbYear = new javax.swing.JComboBox<>();
        cmbMonth = new javax.swing.JComboBox<>();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(500, 500));
        setPreferredSize(new java.awt.Dimension(500, 500));
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        lbl01.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        lbl01.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lbl01.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createCompoundBorder(), javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createCompoundBorder(), javax.swing.BorderFactory.createCompoundBorder()), javax.swing.BorderFactory.createCompoundBorder())));
        getContentPane().add(lbl01, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 30, 270, 20));

        jLabel1.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Enter Your Birthdate");
        getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 70, 180, 20));

        jLabel2.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("Birthday");
        getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 200, 80, -1));

        jLabel3.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("Birthyear");
        getContentPane().add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 110, 80, 30));

        jLabel4.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setText("Birthmonth");
        getContentPane().add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 150, 80, 30));



        cmbYear.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        cmbYear.setModel(new javax.swing.DefaultComboBoxModel<>(yearList));
        cmbYear.setSelectedItem(yearList[selectedYearIndex]);
        cmbYear.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmbYearItemStateChanged(evt);
            }
        });
        cmbYear.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbYearActionPerformed(evt);
            }
        });
        getContentPane().add(cmbYear, new org.netbeans.lib.awtextra.AbsoluteConstraints(210, 110, 120, 30));

        cmbMonth.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        cmbMonth.setModel(new javax.swing.DefaultComboBoxModel<>(months));
        cmbMonth.setSelectedItem(months[selectedMonthIndex]);
        cmbMonth.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmbMonthItemStateChanged(evt);
            }
        });
        cmbMonth.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbMonthActionPerformed(evt);
            }
        });
        cmbMonth.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                cmbMonthPropertyChange(evt);
            }
        });
        getContentPane().add(cmbMonth, new org.netbeans.lib.awtextra.AbsoluteConstraints(210, 150, 120, 30));


        cmbDay.setFont(new java.awt.Font("Arial Narrow", 0, 20)); // NOI18N
        cmbDay.setModel(new javax.swing.DefaultComboBoxModel<>(dayList));
        cmbDay.setSelectedItem(1);
        cmbDay.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbDayActionPerformed(evt);
            }
        });
        getContentPane().add(cmbDay, new org.netbeans.lib.awtextra.AbsoluteConstraints(210, 200, 120, 30));

        pack();
    }// </editor-fold>                        



    private void cmbYearActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        newYearIndex();
        updateDayList();
        myInitComponents();

    }                                       


    private void cmbMonthActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        newMonthIndex();
        updateDayList();
        myInitComponents();
    }                                        

    private void cmbDayActionPerformed(java.awt.event.ActionEvent evt) {                                       
        // TODO add your handling code here:
    }                                      

    private void cmbMonthPropertyChange(java.beans.PropertyChangeEvent evt) {                                        
        // TODO add your handling code here:
    }                                       

    private void cmbMonthItemStateChanged(java.awt.event.ItemEvent evt) {                                          
               // TODO add your handling code here:
    }                                         

    private void cmbYearItemStateChanged(java.awt.event.ItemEvent evt) {                                         
        // TODO add your handling code here:

    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(AgeCalcAgain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(AgeCalcAgain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(AgeCalcAgain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(AgeCalcAgain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new AgeCalcAgain().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JComboBox<Integer> cmbDay;
    private javax.swing.JComboBox<String> cmbMonth;
    private javax.swing.JComboBox<Integer> cmbYear;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel lbl01;
    // End of variables declaration                   
}   

不要在监听器中调用myInitComponents,因为在这种方法中,您创建了全新的GUI组件,所有组件都设置为初始状态,这会给您带来很大的问题。相反,请编写代码,将当前组件设置回初始状态或您想要的任何状态。

我如何修复此错误行为您会问为什么unshawn代码行为不端,这是一个很难回答的问题。为什么不显示相关代码?最好创建并发布一个有效的。在post中显示代码:创建组合框,填充它并将其用于侦听器,等等@prasad_uuuOracle的Java教程非常好的建议!当人们遇到问题或意外行为时,以及在API的任何新领域开始编码之前,最好阅读相关教程。请不要链接。所有相关代码都应该在您的问题中。要知道,我们中的许多人都被防火墙阻挡,无法访问链接,而且链接本质上是不稳定的,代码可能会消失。所有代码必须在问题本身中。-请阅读和,以了解如何更好地提问和使用此网站。此外,您在该链接中发布了大量代码,其中大部分与手头的问题完全无关。我们再次希望您发布一个新的程序,一个将您的问题提取为运行和重现它所需的最小代码的程序。你想让别人尽可能容易地阅读和理解代码——记住我们是志愿者。请阅读已经在评论中发布了好几次的链接。