Выбираемая альтернатива JOptionPane.showMessageDialog - PullRequest
6 голосов
/ 21 марта 2011

Информация о фоновом режиме :

У меня есть мой друг на флоте, и он хотел знать, могу ли я поднять ему маленькое приложение, которое будет рассчитано, когда у него будет охранадолг, потому что, видимо, рассчитывать на календарь трудноЯ использовал 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?

Ответы [ 2 ]

6 голосов
/ 21 марта 2011

Я был в состоянии основываться на ответе trashgod. В то время как он предложил использовать 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());

И во втором окне отображалось то, что я выбрал в первом. Я был действительно впечатлен этим. Конечно, это не та функциональность, к которой я стремился (верхний раздел), но это не делает его менее удивительным! : -)

1 голос
/ 21 марта 2011

Добавьте даты в 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...