Java JOptionPane.showMessageDialog的可选替代项
后台搜索信息: 我有一个在海军的朋友,他想知道我是否能给他开发一个小应用程序,当他有警卫职责时可以计算,因为显然,指望日历是很难的。我使用Java JOptionPane.showMessageDialog的可选替代项,java,swing,Java,Swing,后台搜索信息: 我有一个在海军的朋友,他想知道我是否能给他开发一个小应用程序,当他有警卫职责时可以计算,因为显然,指望日历是很难的。我使用JOptionPane.showMessageDialog给他日期的输出。我是这样做的 GregorianCalendar knownDate = new GregorianCalendar(year,month,day); GregorianCalendar[] futureDates = new GregorianCalendar[10]; for(in
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());
GregorianCalendar knownDate=新的GregorianCalendar(年、月、日);
GregorianCalendar[]未来日期=新的GregorianCalendar[10];
对于(int i=0;i<10;i++){
未来日期[i]=新的格里高利安日历(年、月、日);
futureDates[i].add(日历.月日,10*(i+1));//每10天值班一次
}
字符串newline=System.getProperty(“line.separator”);
StringBuilder sb=新StringBuilder(“Jakes职责日期:”)。追加(换行符);
对于(GregorianCalendar d:未来日期){
某人加上(月[日历月])。加上(“”);
sb.append(d.get(日历日期/月份)).append(换行符);
}
showMessageDialog(null,sb.toString());
“唯一的问题”是无法选择显示的文本。他想在IM和电子邮件中选择它,因为只有一半的懒惰有什么意义,对吗?(唯一的问题是引用,因为我有一种感觉,他会把这件事弄得死去活来……哈哈)
我的问题:
是否有“一行解决方案”来创建可选择的
showMessageDialog
?将日期添加到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);
}
private static final DateFormat df=new SimpleDateFormat(“dd MMM”);
私有静态void createAndShowGUI(){
DefaultListModel dlm=新的DefaultListModel();
对于(int i=0;i<10;i++){
GregorianCalendar knownDate=新的GregorianCalendar();
添加(日历日,每月10*i);
add(i,df.format(knownDate.getTime());
}
JList列表=新的JList(dlm);
showMessageDialog(空,列表);
}
我能够根据垃圾神的答案来构建。虽然他建议使用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());
第二个框显示了我在第一个框中选择的内容。这给我留下了深刻的印象。诚然,这不是我想要的功能(最上面的部分是),但这并不会让它变得不那么棒!:-) 为方便起见,您可以在列表选择侦听器中自动复制到系统剪贴板。谢谢您的尝试,但这不是我所说的选择。这当然很酷,它允许我选择一行,但我的意思是。。。选择要复制到剪贴板的整个文本块。这就是问题!很多组件都支持这种功能。是的,非常酷。值得赞扬的是,JList对选择的定义可能比我所指的要普遍得多!顺便说一句,
DefaultListSelectionModel
允许您执行常规操作,如全选和多选。超级酷!我会记住这一点,因为我正在为一个更严肃的项目做一些摇摆运动。这对一个朋友来说只是一件一次性的事情,但我很高兴我能从中学到一些非常有用的东西!非常感谢!