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

Finestra di dialogo con il testo troncato

Come posso ottenere il testo per adattarlo interamente nel riquadro opzione senza barre di scorrimento e selezionabili per la copia / incolla?

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top