2011-03-20 46 views
6

Backgorund信息可選擇的替代JOptionPane.showMessageDialog

我在海軍我的一個朋友,他想知道如果我能掀起他,一個小應用程序,將calcualte當他有他的衛兵因爲顯然依靠日曆是困難的。我用JOptionPane.showMessageDialog給他日期的輸出。以下是我如何做到這一點。

GregorianCalendar knownDate = new GregorianCalendar(year,month,day); 

GregorianCalendar[] futureDates = new GregorianCalendar[10]; 
for(int i = 0; i < 10; i++) { 
    futureDates[i] = new GregorianCalendar(year,month,day); 
    futureDates[i].add(Calendar.DAY_OF_MONTH,10*(i+1)); // duty every 10 days 
} 
String newline = System.getProperty("line.separator"); 
StringBuilder sb = new StringBuilder("Jakes duty dates:").append(newline); 
for(GregorianCalendar d : futureDates) { 
    sb.append(months[d.get(Calendar.MONTH)]).append(" "); 
    sb.append(d.get(Calendar.DAY_OF_MONTH)).append(newline); 
} 
JOptionPane.showMessageDialog(null,sb.toString()); 

'唯一的問題'是你無法選擇顯示的文本。他想選擇它作爲即時消息和電子郵件,因爲什麼纔是懶惰的一點,對吧? (唯一的問題是在引號,因爲我有一種感覺,他就會範圍蔓延,這對死亡...哈哈)

我的問題

是否有「一個行的解決方案」作出選擇showMessageDialog

+0

@skaffman謝謝!應該想到那個標籤。 :-) – corsiKa 2011-03-20 22:03:19

回答

5

我能夠建立在垃圾回答的基礎上。當他建議用JList,我不是使用一個JTextArea

下面是我在做什麼(這給一種選擇我需要的。):

JTextArea text = new JTextArea(sb.toString()); 
JOptionPane.showMessageDialog(null,text); 

,它的工作就像一個魅力!

============================================== ==

一個小實驗我這樣做後:

DefaultListModel model = new DefaultListModel(); 
for(GregorianCalendar g : futureDates) { 
    String m = months[g.get(Calendar.MONTH)]; 
    String d = String.valueOf(g.get(Calendar.DAY_OF_MONTH)); 
    model.addElement(m + " " + d); 
} 
JList jlist = new JList(model); 

JOptionPane.showMessageDialog(null,jlist); 

JOptionPane.showMessageDialog(null,jlist.getSelectedValue()); 

與第二盒顯示的內容我已經在第一個選擇。我對此印象深刻。現在被授予,這不是我想要的功能(最上面的部分是),但這並沒有讓它變得更好! :-)

+0

這是門票!許多組件支持這種[DnD](http://download.oracle.com/javase/tutorial/uiswing/dnd/defaultsupport.html)。 – trashgod 2011-03-20 23:48:07

+0

是的,它很酷。爲了您的信任,JList對選擇的定義可能比我所指的要普遍得多! – corsiKa 2011-03-20 23:51:09

+0

另外,看到更新的答案 - 你的建議真的很酷! – corsiKa 2011-03-20 23:52:39

1

將日期添加到DefaultListModel,創建一個JList,並將該列表傳遞給showMessageDialog()。它不止一行,但選擇使用平臺的copy按鍵複製到剪貼板。

private static final DateFormat df = new SimpleDateFormat("dd-MMM"); 

private static void createAndShowGUI() { 
    DefaultListModel dlm = new DefaultListModel(); 
    for (int i = 0; i < 10; i++) { 
     GregorianCalendar knownDate = new GregorianCalendar(); 
     knownDate.add(Calendar.DAY_OF_MONTH, 10 * i); 
     dlm.add(i, df.format(knownDate.getTime())); 
    } 
    JList list = new JList(dlm); 
    JOptionPane.showMessageDialog(null, list); 
} 
+0

爲了方便起見,您可以將列表選擇偵聽器中的系統剪貼板自動複製到系統剪貼板。 – trashgod 2011-03-20 23:29:24

+0

謝謝你的嘗試,但那不是我選擇的意思。這當然很酷,它允許我選擇其中一行,但我的意思是...選擇整個文本塊複製到剪貼板。 – corsiKa 2011-03-20 23:38:25