2010-12-01 10 views
2

내 Java GUI 응용 프로그램이 최종 사용자에게 몇 가지 텍스트를 빠르게 보여야하므로 JOptionPane 유틸리티 메소드가 적합합니다. 또한 텍스트는 선택 가능해야하며 (복사 및 붙여 넣기 용) 텍스트가 화면에 표시되지 않도록 텍스트에 잘 맞아야하므로 길이가 길어질 수 있습니다 (~ 100 단어). 이상적으로는 한 번에 모두 표시해야 사용자가 상호 작용할 필요없이 읽을 수 있으므로 스크롤바는 바람직하지 않습니다.JOptionPane.showMessageDialog JTextArea 메시지를 자릅니다

나는 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

어떻게 텍스트 복사/붙여 넣기에 대한 스크롤 및 선택하지 않고 옵션 창에 완전히 맞게받을 수 있나요?

+0

를 내가 사용자로부터 여러 줄의 입력을 받고 싶습니까? –

+0

@ java_enthu : 다른 문제인 것처럼 들리므로 원하는 것을 설명하는 새로운 질문을 제출해야합니다. – maerics

답변

6
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); 
} 
} 
+0

완벽한; 그게 내가 원하는거야. 호기심에서 매직 넘버 "1"은 어떻게이 작품을 만드나요? 무작위로 다른 값 (-1, 0)을 시도했지만 효과가 없습니다. – maerics

+1

1은 마법의 숫자라고 생각하지 않습니다. 키 번호는 줄 바꿈을 발생시키는 너비입니다. – camickr

+0

아, 이제는 그것에 대해 생각해 봅니다. 아마도 setSize가 아닌'setPreferredSize'를 가지고 놀았을 것입니다. 감사! – maerics

2

당신은 올바른 생각을 가지고 있습니다. 텍스트 영역의 행을 조정하십시오.

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

이것은 100 단어의 lorem ipsum을 사용하여이 문제를 해결 한 것으로 보입니다.

+0

어떻게 단어/문자 수를 수행하고 주어진 텍스트 묶음의 줄 수를 예측하기에는 부족한 그 수 (10)를 생각해 낼 수 있습니까? textArea는 필요한 행 수가 몇 개인 지 알려줄 수 없습니까? 약간의 상수 값을 하드 코딩하는 것보다 자동적 인 방법이 있기를 바랬습니다. – maerics

+1

당신이 행을 스스로 계산하고 동적으로 설정해야한다고 생각합니다. rows = 문자열 길이/열. –

-1

이 시도 :

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); 
+0

-1, 1 시간 전에 준 대답과 같습니다. 중복 게시가 필요하지 않습니다. – camickr

3

를 알 수없는 길이의 문자열을 표시해야하는 경우 "즉시"행의 수를 설정할 수 있습니다 : 만약에

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