Java 组合框:getSelectedIndex()在“重新选择”时行为不正常
我的组合框的标识符是cmbYear 项目为1800、1801、1802、1803等。。。,2017年、2018年 然后我负责这个项目。当我在用户界面中选择1801时,getSelectedIndex返回控制台中打印的1,这是正确的 在同一次运行中,如果我再次选择1802,getSelectedIndex仍然返回1。在随后的每个选择中,getSelectedIndex返回1,即第一个选择的索引 从cmbYearActionPerformedjava.awt.event.ActionEvent evt方法调用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
/*
* 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的任何新领域开始编码之前,最好阅读相关教程。请不要链接。所有相关代码都应该在您的问题中。要知道,我们中的许多人都被防火墙阻挡,无法访问链接,而且链接本质上是不稳定的,代码可能会消失。所有代码必须在问题本身中。-请阅读和,以了解如何更好地提问和使用此网站。此外,您在该链接中发布了大量代码,其中大部分与手头的问题完全无关。我们再次希望您发布一个新的程序,一个将您的问题提取为运行和重现它所需的最小代码的程序。你想让别人尽可能容易地阅读和理解代码——记住我们是志愿者。请阅读已经在评论中发布了好几次的链接。