JCombobox根据true / false调整文本

时间:2013-02-28 10:47:42

标签: java swing jdbc boolean jcombobox

我有一个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;
    }

3 个答案:

答案 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());