2011-03-20 86 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