0

在JDateChooser中,我們添加了一個addPropertyChangeListener來檢測是否選擇了日期。如果選擇了,我們想打開一個JCombobox。我們選擇時會檢測(日期)字符串,但我們無法打開JComboBox。如何在addPropertyChangeListener中打開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); 
      } 

     } 

    }  

}); 
+0

它看起來像你正在使用空佈局。雖然許多新的Swing程序員null佈局看起來似乎是創建看起來很複雜的GUI的最簡單方法,但一旦您對Swing有所瞭解,您會發現這是一個謬論,null佈局會讓您陷入困境,GUI的創建非常不靈活,難以升級,調試和維護,雖然使用單一屏幕分辨率的GUI可能在單一平臺上看起來不錯,但它們在所有其他平臺上看起來都不錯,並且明智地使用佈局管理器是更好的選擇。 – 2014-12-02 12:11:26

回答

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設計中的幻想。影響組件的個體大小的因素太多,其中沒有一個可以控制。搖擺設計爲核心與佈局管理工作,丟棄這些會導致沒有問題,問題是,你將花費越來越多的時間試圖糾正

看一看Why is it frowned upon to use a null layout in SWING?Laying Out Components Within a Container瞭解更多詳情結束..

+0

我們只聲明瞭JComboBox chooseTimeBox作爲局部變量。我們以前沒有使用它。如果我們說add(chooseTimeBox);它仍然沒有顯示。 – tinaw25 2014-12-02 10:27:57

+1

通常我會建議使容器無效並重新繪製它,但是你似乎正在廢除佈局管理器,所以這不會起作用......還有一個避免使用「空」佈局的原因。我做了很多猜測,因爲你沒有給你的問題提供一個可運行的例子 – MadProgrammer 2014-12-02 10:32:04

+0

我們解決了這個問題,它正在工作,但JCombox在Mac上是不可見的。謝謝你的幫助 – tinaw25 2014-12-02 10:50:56

相關問題