在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);
}
}
}
});
好吧,组合框不包含在任何可显示元素中的事实可能是导致您问题的主要原因......
// 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旨在以布局管理器为核心,丢弃这些将导致无休止的问题和问题,您将花费越来越多的时间试图纠正
看看为什么在 SWING 中使用空布局是不受欢迎的?和 在容器内布置组件 了解更多细节...