최근에 다룰 프로젝트에 대한 JTextPanes 사용자를 실험하고 있습니다. 온라인에서 여러 줄의 수를 계산하는 방법에 대한 자세한 내용이 온라인에 있습니다. 텍스트 창 그러나 텍스트 창의 문서에 아이콘이나 구성 요소를 삽입 할 때 찾은 솔루션이 모두 실패한 것 같습니다.JTextPane 행 개수 아이콘 및 구성 요소 포함
내가 그 일반 텍스트를 한 일 (물론 구현 솔루션)이 하나 발견 해결책 : 그러나 BadLocationException when using Utilities.getRowStart On hit of Enter key
내가 컴포넌트 (JLabel의) 또는 그 문제에 대한 일반 아이콘을 삽입하려고하면, 유틸리티의 getRowStart() 메소드는 널 포인터 예외를 발생시킵니다. 내가 이것에 대해 비정상적인 것을 발견 한 것은 자바 문서가 "... 이것은 관련된 문서에서 한 문자의 속성으로 표현됩니다."라고 말합니다. 그래서 다른 문자로 취급 할 것이라고 생각했지만이게 보이는 것 같습니다. 그렇지 않아.
누구든지 문제를 재현하려면 코드 예제를 포함 시켰습니다. 나는 단지 그것이 가능하지 않다는 느낌을 가지고있다. 그것은 수치 스럽다.
import java.awt.Dimension;
import java.awt.Image;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Utilities;
public class Test{
private JFrame frame;
private JTextPane textPane;
private Image img;
private URL imgURL;
public Test(){
frame = new JFrame();
frame.setSize(new Dimension(500,300));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textPane = new JTextPane();
try {
imgURL = new URL("http://www.freeiconspng.com/uploads/floppy-save-icon--23.png");
img = ImageIO.read(imgURL);
JLabel label = new JLabel(new ImageIcon(img.getScaledInstance(10, 10, Image.SCALE_SMOOTH)));
textPane.insertComponent(label);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
frame.getContentPane().add(textPane);
frame.setVisible(true);
}
public JTextPane getTextPane(){
return this.textPane;
}
public int getLineCount(){
int totalCharacters = textPane.getDocument().getLength();
int lineCount = (totalCharacters == 0) ? 1 : 0;
try {
int offset = totalCharacters;
while (offset > 0) {
offset = Utilities.getRowStart(textPane, offset) - 1;
lineCount++;
}
} catch (BadLocationException e) {
e.printStackTrace();
}
return lineCount;
}
public static void main(String[] args){
Test t = new Test();
t.getLineCount();
}
}
['EventQueue.invokeLater()'(http://docs.oracle.com/ javase/7/docs/api/java/awt/EventQueue.html # invokeLater (java.lang.Runnable)) 호출. 예 :'EventQueue.invokeLater (new Runnable() {@Override public void run() {테스트 t = 새 테스트(); t.getLineCount();}}); ' –
아 그래요, 고맙다! – samcp20
@ samcp20 [텍스트 유틸리티] (https://tips4java.wordpress.com/2008/10/26/text-utilities/)를 확인하십시오. 여기에는 텍스트 구성 요소 API를 사용하여 행 수를 얻는'getLines()'메소드가 들어 있습니다. 삽입 된 구성 요소로 시도한 적이 없지만 코드가 훨씬 간단하다는 것을 인정해야합니다. – camickr