如何在addPropertyChangeListener中打开JCombobox

时间:2014-12-02 09:52:18

标签: java swing layout-manager jdatechooser propertychangelistener

在JDateChooser中,我们添加了一个addPropertyChangeListener,用于检测是否选择了日期。如果选择它,我们想打开一个JCombobox。我们选择时会检测到(日期)字符串,但是我们无法打开JComboBox。

以下是代码:

dateChooserCal.getDateEditor().addPropertyChangeListener(new PropertyChangeListener() {
    public void propertyChange(PropertyChangeEvent evt) 
    {
        date = dateChooserCal.getDate();

        if ("date".equals(evt.getPropertyName())) 
        {   
            dates = evt.getNewValue();
            dateString = String.format("%1$td-%1$tm-%1$tY", date);  
            if (dateString != null) 
            {
                System.out.print(dateString);
                chooseTimeBox = new JComboBox(controllerApp.getTime());
                chooseTimeBox.setBounds(215, 261, 282, 22);
                add(chooseTimeBox);
                chooseTimeBox.setVisible(true);
            }

        }

    }       

});

1 个答案:

答案 0 :(得分:3)

组合框未包含在任何可显示元素中的事实可能是导致问题的主要原因......

// You create a new instance
chooseTimeBox = new JComboBox(controllerApp.getTime());
// You  position and size, more on this later...
chooseTimeBox.setBounds(215, 261, 282, 22);
// You make it visible...but it's visible by default...
chooseTimeBox.setVisible(true);
// But you never add it to anything...

因为您似乎正在使用实例字段,我可能会猜测您已经创建了一个先前的实例并且已经添加了它,在这种情况下,您应该更新该实例模型...

避免使用null布局,像素完美布局是现代ui设计中的一种幻觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正

有关详细信息,请查看Why is it frowned upon to use a null layout in SWING?Laying Out Components Within a Container