JOptionPane.showMessageDialog tronca messaggio JTextArea
-
29-09-2019 - |
Domanda
Il mio esigenze applicative Java GUI per mostrare rapidamente un testo per l'utente finale, in modo che i metodi di utilità JOptionPane
sembrano una buona misura. Inoltre, il testo deve essere selezionabile (per copia-e-incolla) e potrebbe essere un po 'lungo (~ 100 parole) quindi deve integrarsi bene nella finestra (nessun testo fuori dallo schermo); idealmente dovrebbe tutto essere visualizzato in una sola volta in modo che l'utente possa leggerlo senza bisogno di interagire, in modo da barre di scorrimento sono indesiderabili.
Ho pensato di mettere il testo in un JTextArea
e l'utilizzo che per il messaggio in JOptionPane.showMessageDialog
sarebbe stato facile ma sembra troncare il testo!
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);
}
Come posso ottenere il testo per adattarlo interamente nel riquadro opzione senza barre di scorrimento e selezionabili per la copia / incolla?
Soluzione
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);
}
}
Altri suggerimenti
Se avete bisogno di visualizzare una stringa di lunghezza sconosciuta, è possibile impostare il numero di righe "al volo":
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);
}
Hai avuto l'idea giusta. Basta regolare le righe del textarea.
textArea.setRows(10); // or value that seems acceptable to you...
Questo sembrava per risolvere il problema per me, utilizzando 100 parole di lorem ipsum.
Prova questo:
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);