JOptionPane.showMessageDialog усекает сообщение JTextArea - PullRequest
2 голосов
/ 02 декабря 2010

Моему Java-приложению с графическим интерфейсом нужно быстро показать некоторый текст конечному пользователю, поэтому полезные методы JOptionPane кажутся подходящими.Кроме того, текст должен быть выбираемым (для копирования и вставки), и он может быть несколько длинным (~ 100 слов), поэтому он должен хорошо вписываться в окно (без текста за пределами экрана);в идеале все должно отображаться сразу, чтобы пользователь мог читать его, не взаимодействуя с ним, поэтому полосы прокрутки нежелательны.

Я думал поместить текст в JTextArea и использовать его для сообщения в JOptionPane.showMessageDialogбыло бы легко, но, похоже, обрезать текст!

public static void main(String[] args) {
  JTextArea textArea = new JTextArea();
  textArea.setText(getText()); // A string of ~100 words "Lorem ipsum...\nFin."
  textArea.setColumns(50);
  textArea.setOpaque(false);
  textArea.setEditable(false);
  textArea.setLineWrap(true);
  textArea.setWrapStyleWord(true);
  JOptionPane.showMessageDialog(null, textArea, "Truncated!", JOptionPane.WARNING_MESSAGE);
}

Dialog with truncated text

Как мне сделать так, чтобы текст полностью помещался на панели параметров без полос прокрутки и выбирался для копирования / вставки

Ответы [ 4 ]

6 голосов
/ 02 декабря 2010
import java.awt.*;
import javax.swing.*;

public class TextAreaPreferredHeight2
{
 public static void main(String[] args)
 {
  String text = "one two three four five six seven eight nine ten ";
  JTextArea textArea = new JTextArea(text);
  textArea.setColumns(30);
  textArea.setLineWrap( true );
  textArea.setWrapStyleWord( true );
  textArea.append(text);
  textArea.append(text);
  textArea.append(text);
  textArea.append(text);
  textArea.append(text);
  textArea.setSize(textArea.getPreferredSize().width, 1);
  JOptionPane.showMessageDialog(
   null, textArea, "Not Truncated!", JOptionPane.WARNING_MESSAGE);
 }
}
3 голосов
/ 12 августа 2013

Если вам нужно отобразить строку неизвестной длины, вы можете установить количество строк «на лету»:

public static void showMessageDialogFormatted(String msg, String title, int messageType, int columnWidth) {
    JTextArea textArea = new JTextArea(msg);
    textArea.setColumns(columnWidth);
    textArea.setRows(msg.length() / columnWidth + 1);
    textArea.setLineWrap(true);
    textArea.setEditable(false);
    textArea.setWrapStyleWord(true);
    JOptionPane.showMessageDialog(null, textArea, title, messageType);
}
2 голосов
/ 02 декабря 2010

У вас правильная идея.Просто настройте ряды своей текстовой области.

textArea.setRows(10); // or value that seems acceptable to you...

Похоже, это решило проблему, используя 100 слов lorem ipsum.

0 голосов
/ 02 декабря 2010

Попробуйте это:

JTextArea textArea = new JTextArea();
textArea.setText(getText());
textArea.setSize(limit, Short.MAX_VALUE); // limit = width in pixels, e.g. 500
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
...