【问题标题】:How to open JCombobox in a addPropertyChangeListener如何在 addPropertyChangeListener 中打开 JCombobox
【发布时间】:2014-12-02 09:52:17
【问题描述】:

在 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);
            }

        }

    }       

});

【问题讨论】:

  • 看起来您使用的是空布局。虽然对于许多新的 Swing 程序员来说,空布局似乎是创建好看的复杂 GUI 的最简单方法,但一旦您熟悉 Swing,您会发现这是一个谬误,空布局将您困在其中,用它创建的 GUI 非常不灵活,难以升级、调试和维护,虽然 GUI 在使用单一屏幕分辨率的单一平台上可能看起来不错,但在所有其他平台上看起来很糟糕,并且明智地使用布局管理器是一个更好的选择。

标签: java swing layout-manager jdatechooser propertychangelistener


【解决方案1】:

好吧,组合框不包含在任何可显示元素中的事实可能是您问题的主要原因......

// 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 布局,像素完美的布局是现代用户界面设计中的一种错觉。影响组件单个尺寸的因素太多,您无法控制。 Swing 旨在与核心的布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,您将花费越来越多的时间来尝试纠正

查看Why is it frowned upon to use a null layout in SWING?Laying Out Components Within a Container 了解更多详情...

【讨论】:

  • 我们只将 JComboBox chooseTimeBox 声明为局部变量。我们以前没有使用过它。如果我们说 add(chooseTimeBox);它仍然没有显示。
  • 通常我会建议使容器无效并重新绘制它,但您似乎正在取消布局管理器,所以这不起作用......还有另一个避免 null 布局的原因。我做了很多猜测,因为您没有为您的问题提供可运行的示例
  • 我们解决了这个问题,它可以工作,但 JCombox 在 Mac 上是不可见的。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 2011-02-16
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多