单击鼠标从TextArea中选择整行

时间:2018-07-19 04:22:07

标签: javafx textarea

我正在为应用程序使用JavaFX。在我的应用程序中,我有一个按钮,单击该按钮后,应该可以在textarea上显示结果。现在,我想从文本区域中选择整行。但是我编写的代码只能选择我单击的值,这意味着就像我单击的单词一样。请建议我对此进行修改。

@FXML
public void find_btn_action(ActionEvent event) throws MWException
{

      double[] peaks= {1.2,5.6,8.0,9.0};
      StringBuilder sb = new StringBuilder(peaks.length);
      for(int i= 0; i < peaks.length ; i++)
     {
       result[i] = peaks[i];
       sb.append(result[i]+"\n");
   }

      auto.setText(sb.toString());  
      auto.setOnMouseClicked(new EventHandler<Event>()
    {
        @Override
        public void handle(Event arg0)
        {
            selectedVal = auto.getSelectedText();
            System.out.println("selected text:"+ selectedVal);

        }
    });

  }

1 个答案:

答案 0 :(得分:0)

在鼠标单击侦听器检查中,如果单击位于内容区域之内,如果是这种情况,请使用插入号确定TextArea文本中的下一个/上一个换行符,然后选择范围:

textArea.setOnMouseClicked(evt -> {
    if (evt.getButton() == MouseButton.PRIMARY) {

        // check, if click was inside the content area
        Node n = evt.getPickResult().getIntersectedNode();
        while (n != textArea) {
            if (n.getStyleClass().contains("content")) {
                // find previous/next line break
                int caretPosition = textArea.getCaretPosition();
                String text = textArea.getText();
                int lineBreak1 = text.lastIndexOf('\n', caretPosition - 1);
                int lineBreak2 = text.indexOf('\n', caretPosition);
                if (lineBreak2 < 0) {
                    // if no more line breaks are found, select to end of text
                    lineBreak2 = text.length();
                }

                textArea.selectRange(lineBreak1, lineBreak2);
                evt.consume();
                break;
            }
            n = n.getParent();
        }
    }
});