1

我有一个JComboBoxNo& Yes。这就是我将其存储到数据库中的方式:

jdto.setPlacement("Yes".equals(comboPlace.getSelectedItem()));

然后将其传递jdto到我的创建方法中。选择yes 会给出true。我现在正在努力以反向逻辑工作。

我希望能够Yes or No根据数据库中的真/假值自动填充组合框。

atm 我有以下

fieldPlace.setSelectedItem(jdto.getPlacement());

我尝试了带有字符串的 if else 语句,但无法这样做。

有人可以演示如何实现这一目标。

这是 getPlacement()

public Boolean getPlacement() {
        return placement;
    }
4

3 回答 3

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();
            }
        });
    }
}
于 2013-02-28T11:32:22.733 回答
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....);   
     }
 }
于 2013-02-28T12:15:24.217 回答
1

看起来您的JComboBox模型包含 的实例String,因此请编写一个辅助方法来翻译:

public String getPlacementString() {
    if (getPlacement()) {
        return "Yes";
    } else {
        return "No";
    }
}

然后使用该方法setSelectedItem()

fieldPlace.setSelectedItem(jdto.getPlacementString());
于 2013-02-28T11:25:45.417 回答