我有一个JComboBox
,其值为No
& Yes
。这就是我将它存储到数据库中的方式:
jdto.setPlacement("Yes".equals(comboPlace.getSelectedItem()));
然后将jdto
传递给我的create方法。选择yes会给出值true。我现在正努力在逆向逻辑中工作。
我希望能够使用Yes or No
自动填充组合框,具体取决于数据库的真/假值。
atm我有以下
fieldPlace.setSelectedItem(jdto.getPlacement());
我尝试if else语句字符串,但无法这样做。
有人可以证明如何实现这一目标。
这是getPlacement()
public Boolean getPlacement() {
return placement;
}
答案 0 :(得分:2)
将Item添加到DefaultComboBoxModel,可以从JComboBox API中实现的正确数组自动初始化
您可以使用setSelectedItem或硬编码setSelectedIndex
例如
import java.awt.event.ActionEvent;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class ComboBoxBooleanModel {
private javax.swing.Timer timer = null;
private Vector<Boolean> comboBoxItems;
private JComboBox box;
public ComboBoxBooleanModel() {
comboBoxItems = new Vector<Boolean>();
comboBoxItems.add(Boolean.TRUE);
comboBoxItems.add(Boolean.FALSE);
box = new JComboBox(comboBoxItems);
JFrame frame = new JFrame("");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(box);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
box.setSelectedIndex(1);
}
});
start();
}
private void start() {
timer = new javax.swing.Timer(1250, updateCol());
timer.start();
}
public Action updateCol() {
return new AbstractAction("text load action") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
if (box.getSelectedItem() == (Boolean) false) {
box.setSelectedItem((Boolean) true);
} else {
box.setSelectedItem((Boolean) false);
}
}
};
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ComboBoxBooleanModel comboBoxModel = new ComboBoxBooleanModel();
}
});
}
}
答案 1 :(得分:2)
将布尔值存储在模型中,而不是它们的字符串表示形式 - 项目的自定义呈现是...自定义渲染器的任务。
public class BooleanListCellRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent( ... Object value, ...) {
if (Boolean.TRUE.equals(value) {
value = "Yes";
} else if (Boolean.FALSE.equals(value)) {
value = "No";
}
return super.getListCellRendererComponent(... value....);
}
}
答案 2 :(得分:1)
看起来您的JComboBox
模型包含String
的实例,因此请编写一个翻译的辅助方法:
public String getPlacementString() {
if (getPlacement()) {
return "Yes";
} else {
return "No";
}
}
然后将该方法用于setSelectedItem()
:
fieldPlace.setSelectedItem(jdto.getPlacementString());