2014-09-11 4 views
0

JTextArea의 select 함수를 사용하는 데 문제가 있습니다. 변수가 올바르게 채워지면 변수를 System.out.print()으로 테스트했습니다. 모든 것이 좋지만 select 함수는 전혀 작동하지 않습니다.JTextArea.select()가 아무것도 선택하지 않음

public class exercises extends JFrame { 
    JTextField tf_search; 
    String searchstr; 
    JTextArea textarea; 
    String aktStr; 
    int Index; 

    public exercises(String title) { 
     super(title); 
     setLayout(new FlowLayout()); 
     JComboBox<String> combo = new JComboBox<String>(); 
     combo.addItem("Here stands the whole Shit"); 
     String[] systemfonts = new String[200]; 
     systemfonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); 
     for (String s : systemfonts) { 
      combo.addItem(s); 
     } 

     textarea = new JTextArea(10, 40); 
     String examplestr = "Here I only test how often the word olo is in the text. " 
       + "\nI'll add olo as often as I like. olo sounds like lol olo"; 
     textarea.setText(examplestr); 
     JPanel p_search = new JPanel(); 

     tf_search = new JTextField(); 
     JButton b_search = new JButton("Search"); 
     //JButton b_weitersuchen = new JButton("weiter suchen"); // I also want to implement a  function to keep on searching for more appereances of the word that is searched 
     p_search.add(b_search); 
     //p_suchen.add(b_weitersuchen); 
     p_search.add(tf_search); 
     p_search.setLayout(new GridLayout(3, 1)); 
     //b_weitersuchen.addActionListener(new MeinActionLauscher()); 
     b_search.addActionListener(new MyActionListener()); 
     add(p_search); 
     add(textarea); 
     add(combo); 
    } 

    class MyActionListener implements ActionListener { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      String label; 
      label = e.getActionCommand(); 
      if (label.equals("Search")) { 
       search(); 
      } 
    // if(label.equals("weiter suchen")) 
      // weiterSuchen(); 
     } 
    } 

    void search() { 
     searchstr = tf_search.getText(); 
     if (searchstr == null) { 
      return; 
     } 

     aktStr = textarea.getText(); 
     Index = aktStr.indexOf(searchstr); 

     if (Index == -1) { 
      JOptionPane.showMessageDialog(null, "String not found", "Dialog", JOptionPane.INFORMATION_MESSAGE); 
     } else { 
      textarea.select(Index, Index + searchstr.length()); 
     } 
    } 

    public static void main(String[] args) { 
     exercises bla = new exercises("ComboBox Test"); 
     bla.pack(); 
     bla.setVisible(true); 
     bla.setSize(700, 700); 
    } 
} 
+0

이 링크는 텍스트를 강조 표시하려는 경우 유용 할 수 있습니다. http://stackoverflow.com/questions/5949524/highlight-sentence-in-textarea – Joe

+0

텍스트를 선택하고 텍스트를 강조 표시합니까? 링크를 가져 주셔서 감사합니다. 그들은 내가 선택한 것과 동일한 기본 구조를 사용합니다. 내 코드에서 실수를 찾도록 도와주지는 않았다. – Cappuccino90

답변

0

직접 해결. 텍스트 영역은 단어를 선택하기 전에 집중해야합니다.

void search() { 
    searchstr = tf_search.getText(); 
    if (searchstr == null) { 
     return; 
    } 

    aktStr = textarea.getText(); 
    Index = aktStr.indexOf(searchstr); 

    if (Index == -1) { 
     JOptionPane.showMessageDialog(null, "String not found", "Dialog", JOptionPane.INFORMATION_MESSAGE); 
    } else { 
     textarea.requestFocus(); 
     textarea.select(Index, Index + searchstr.length()); 
    } 
} 
0

난 당신의 코드를 테스트하고 하나 나를 위해 작동하지 않았다 : 여기

textarea.requestFocus(); 

코드의 새로운 라인과 검색 기능입니다. 문제는 커서 선택을 표시하기 위해 JComponent에 포커스가 필요하다는 것입니다. 따라서 '선택'방법 바로 전에

textarea.requestFocusInWindow(); 

으로 전화하면 좋은 것입니다. 강조 표시를 초점에 의존하지 않으려면 내 의견에 언급 된 형광펜을 사용합니다.

0

텍스트 영역에 중점을 두지 않았습니다. 텍스트를 선택하기 전에 textarea.requestFocus();을 추가하십시오.

} else { 
     textarea.requestFocus(); 
     textarea.select(Index, Index + searchstr.length()); 
    }