JOptionPane.showMessageDialog的可选替代方法

cor*_*iKa 6 java swing

Backgorund信息:

我在海军中有一个我的伙伴,他想知道我是否可以鞭打他一个小应用程序,当他有警卫职责时会计算,因为显然指望日历很难.我曾经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());
Run Code Online (Sandbox Code Playgroud)

"唯一的问题"是您无法选择显示的文本.他想为IM和电子邮件选择它,因为只有半懒,这是什么意思,对吧?(唯一的问题是引用,因为我有一种感觉,他的范围会蔓延到死亡......哈哈)

我的问题:

是否有一个"一线解决方案"来做出可选择的showMessageDialog

cor*_*iKa 6

我能够建立在trashgod的答案上.虽然他建议使用a JList,但我使用的是JTextArea(它提供了我需要的选择).

这是我正在做的事情:

JTextArea text = new JTextArea(sb.toString());
JOptionPane.showMessageDialog(null,text);
Run Code Online (Sandbox Code Playgroud)

它的工作就像一个魅力!

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

经过一些实验,我做到了这一点:

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());
Run Code Online (Sandbox Code Playgroud)

第二个框显示了我在第一个框中选择的内容.我对此印象非常深刻.现在被授予,这不是我想要的功能(顶部是),但这并不会让它变得不那么棒!:-)