2012-09-19 4 views
2

JTextPanel 텍스트의 어느 부분이 선택되어 있는지 알고 싶습니다. JTextPane.getSelectionStart()JTextPane.getSelectionEnd()으로 전화를 걸려고했지만 항상 현재 캐럿 위치와 동일한 값을 반환합니다. 내 문제는 무엇입니까?JTextPane에서 선택하는 방법

현재 선택 사항을 얻는 코드 exapmle에 대해 감사 할 것입니다.

+2

문서, Caret 및 viewToModel, 더 나은 도움을 위해 곧 [SSCCE] (http://sscce.org/) – mKorbel

+1

[현재 선택 사항을 얻은 모든 코드 exapmle에 감사드립니다.] (http : // www.java2s.com/Tutorial/Java/0240__Swing/0240__JTextComponent.htm) – mKorbel

답변

0

나는 내 문제를 발견을 - 그 JTextPane의 내용을 변경 (그래서 선택을 떨어 뜨리고) 나는 keyTyped 이벤트를 도착하기 전에 한 사용자 정의 FocusListener이었다.

어쨌든 모두에게 감사의 말을 전합니다.

1
public class TextPaneHighlightsDemo extends JFrame { 

public TextPaneHighlightsDemo() { 
    super("SplashScreen demo"); 
    setSize(300, 200); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    final JTextPane textPane = new JTextPane(); 
    add(textPane); 
    textPane.addCaretListener(new CaretListener() { 

     @Override 
     public void caretUpdate(CaretEvent e) { 
      Highlight[] h = textPane.getHighlighter().getHighlights(); 
      for(int i = 0; i < h.length; i++) { 
       System.out.println(h[i].getStartOffset()); 
       System.out.println(h[i].getEndOffset()); 
      } 

     } 
    }); 
     } 

public static void main (String args[]) { 
    TextPaneHighlightsDemo test = new TextPaneHighlightsDemo(); 
    test.setVisible(true); 
} 
} 
7

JTextComponent#getSelectedText()을 살펴보십시오. JTextPane의 인스턴스에서이 메서드를 호출하면 JTextPane의 선택한 텍스트가 반환됩니다. 작은 예를 않았다

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class JavaApplication101 { 

    private JTextPane jTextPane; 
    private JButton btnGetSelectedText; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new JavaApplication101().createAndShowUI(); 
      } 
     }); 
    } 

    private void createAndShowUI() { 

     JFrame frame = new JFrame("Test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     initComponents(frame.getContentPane()); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    private void initComponents(Container contentPane) { 
     jTextPane = new JTextPane(); 
     btnGetSelectedText = new JButton("Get selected text"); 

     btnGetSelectedText.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane.showMessageDialog(null, jTextPane.getSelectedText()); 
      } 
     }); 
     contentPane.add(jTextPane, BorderLayout.NORTH); 
     contentPane.add(btnGetSelectedText, BorderLayout.SOUTH); 
    } 
} 
+1

정확하고 간단한 대답입니다. – keuleJ

관련 문제