2011-03-20 31 views
6

AMAÇ bilgileri:Seçilebilir alternatif

donanmadan benim bir dostum var, o da gardını sahip olduğunda ben calcualte verecek bir küçük app onu kamçı eğer bilmek istiyordu Görev, görünüşe göre bir takvime güvenmek zordur. Ona tarihlerin çıkışını vermek için JOptionPane.showMessageDialog kullanmıştım. İşte ben bunu yapıyorum.

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()); 

'Tek sorun' görüntülenen metni seçemezsiniz. IM ve e-posta için seçmek ister, çünkü sadece tembel tembelliğin anlamı nedir?

bir seçici yapmaya "tek hat çözüm" var mı:

Sorum (o kapsam ölüme bu sünme olacak bir duygu çünkü Tek sorun haha ​​... tırnak içinde olduğunu) showMessageDialog?

+0

@skaffman Teşekkürler! Bu etiketi düşünmüş olmalı. :-) – corsiKa

cevap

5

Trashgod'un yanıtını üzerine inşa edebildim. (. İhtiyacım seçimin tür verir):

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

Ve bir cazibe gibi çalışıyor o JList kullanarak öne sürerken, bunun yerine

İşte yapıyorum bir JTextArea kullanıyorum!

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

Bunu yapan biraz deneme sonra:

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()); 

Ve ikinci kutuda ilk birinde seçtiklerinizle sergiledi. Bununla gerçekten çok etkilendim. Şimdi, bu benim için gittiğim (üst bölüm) işlev değil, ama bu daha az harika yapmaz! :-)

+0

Bu bilet! Birçok bileşen bu tür bir [DnD] özelliğini desteklemektedir (http://download.oracle.com/javase/tutorial/uiswing/dnd/defaultsupport.html). – trashgod

+0

Evet, oldukça havalı. Ve kredinize göre, JList'in seçim tanımı muhtemelen benim bahsettiğimden çok daha yaygın! – corsiKa

+0

Ayrıca, bkz. Güncellenmiş cevap - öneriniz gerçekten havalı! – corsiKa

1

Bir DefaultListModel tarihini ekleyin, bir JList oluşturun ve listeyi showMessageDialog()'a iletin. Birden fazla satır var, ancak seçim platformunun copy tuşunu kullanarak panoya kopyalar.

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

Kolaylık sağlamak için, kopyayı liste seçim dinleyicisindeki sistem panosuna otomatik hale getirebilirsiniz. – trashgod

+0

Deneme için teşekkürler, ama demek istediğim seçim bu değil. Bu kesinlikle harika, satırlardan birini seçmeme izin veriyor, ama ... ... panoya kopyalamak için metnin tüm bloğunu seçiyorum. – corsiKa