我正在制作一个单位转换器并且遇到了一个问题,我已经摆脱了其余的代码并且已经足够用来显示问题了。
在我的comboBox中,第一个让我可以选择:长度单位或时间单位,在我选择一个之后,然后为每个组合框加载不同的模型。这就是问题所在。当我为:length或time模型选择其中一个选项时,它会将两个comboBox更改为相同的选项而我不希望这样。我想能够为每个盒子(厘米)和(米)
做出不同的选择import java.awt.Toolkit;
import javax.swing.DefaultComboBoxModel;
public class TestConverter extends javax.swing.JFrame {
public TestConverter() {
initComponents();
setSize(350,225); //set the starting size of frame
setLocationRelativeTo(null); //on startup centers the frame
comboBoxFrom.setSelectedIndex(0); //comboBox starts at index 0(first item in list) -1 puts box empty
comboBoxTo.setSelectedIndex(0);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
comboBoxFrom = new javax.swing.JComboBox<>();
comboBoxTo = new javax.swing.JComboBox<>();
btnReset = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Unit Converter2");
setFont(new java.awt.Font("Copperplate Gothic Light", 1, 14)); // NOI18N
setResizable(false);
comboBoxFrom.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Choose One..", "Length Units", "Time Units" }));
comboBoxFrom.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
comboBoxFromActionPerformed(evt);
}
});
comboBoxTo.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Choose One..", " " }));
comboBoxTo.setToolTipText("");
comboBoxTo.setEnabled(false);
comboBoxTo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
comboBoxToActionPerformed(evt);
}
});
btnReset.setBackground(new java.awt.Color(0, 204, 0));
btnReset.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
btnReset.setForeground(new java.awt.Color(204, 0, 0));
btnReset.setText("Reset");
btnReset.setActionCommand("Convert To");
btnReset.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnResetActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addGap(148, 148, 148)
.addComponent(btnReset)
.addContainerGap(617, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGap(187, 187, 187)
.addComponent(comboBoxTo, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addGap(186, 186, 186)
.addComponent(comboBoxFrom, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(35, 35, 35)
.addComponent(comboBoxFrom, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(btnReset)
.addGap(18, 18, 18)
.addComponent(comboBoxTo, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(346, Short.MAX_VALUE))
);
pack();
setLocationRelativeTo(null);
}// </editor-fold>
private void comboBoxFromActionPerformed(java.awt.event.ActionEvent evt) {
String lengthUnits[] = {"Centimeters", "Feet", "Inches", "Kilometers", "Light Years", "Miles", "Meters", "Yards" };
String timeUnits[] = {"Hours", "Milliseconds", "Minutes", "Seconds"};
if(comboBoxFrom.getSelectedItem().equals("Length Units")){
comboBoxTo.setEnabled(true); //set the comboBoxTo to be activated
DefaultComboBoxModel length = new DefaultComboBoxModel(lengthUnits); //makes a new model and fills it from the array lengthUnits
comboBoxFrom.setModel( length );
comboBoxTo.setModel(length);
}
else if(comboBoxFrom.getSelectedItem().equals("Time Units")){
comboBoxTo.setEnabled(true); //set the comboBoxTo to be activated
DefaultComboBoxModel time = new DefaultComboBoxModel(timeUnits); //makes a new model and fills it from the array lengthUnits
comboBoxFrom.setModel( time );
comboBoxTo.setModel(time);
}
}
private void comboBoxToActionPerformed(java.awt.event.ActionEvent evt) {
}
private void btnResetActionPerformed(java.awt.event.ActionEvent evt) {
String comboStart[] = {"Choose one..", "Length Units", "Time Units"};
DefaultComboBoxModel reset = new DefaultComboBoxModel(comboStart);
comboBoxFrom.setModel(reset);
comboBoxTo.setModel(reset);
comboBoxFrom.setSelectedIndex(0); // starts the comboBox at index 0. type -1 to start it empty
comboBoxTo.setSelectedIndex(0);
comboBoxTo.setEnabled(false);
}
public static void main(String args[]) {
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(ConverterV2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ConverterV2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ConverterV2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ConverterV2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TestConverter().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton btnReset;
private javax.swing.JComboBox<String> comboBoxFrom;
private javax.swing.JComboBox<String> comboBoxTo;
// End of variables declaration
private void setIcon() { //method to get the icon image for jFrame
setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("Icon.png")));
}
}
答案 0 :(得分:1)
DefaultComboBoxModel length = new DefaultComboBoxModel(lengthUnits); //makes a new model and fills it from the array lengthUnits
comboBoxFrom.setModel( length );
comboBoxTo.setModel(length);
。当我为:length或time模型选择其中一个选项时,它会将两个comboBox更改为相同的选择
您的代码正在共享相同的模型。这意味着任何一个组合框都会更新相同的模型。
您需要两个单独的模型:
comboBoxFrom.setModel( new DefaultComboBoxModel( lengthUnits ) );
comboBoxTo.setModel( new DefaultComboBoxModel( lengthUnits ) );