我有一个JFrame,显示存储在我的计算机上的当前电影.它在JTextArea中将文件的名称显示为字符串. 我想要做的是双击一个特定的字符串(代表我的计算机上的实际文件),该文件将被打开. 打开
我想要做的是双击一个特定的字符串(代表我的计算机上的实际文件),该文件将被打开.
打开部分和双击部分已经解决,但是当我双击我的JTextArea中的字符串时,只会选择该字符串的一部分. (我正在使用JTextArea.getSelectedText()).
我想要的是整个字符串被选中,我可以检索字符串.我需要这样做,因为我的一些电影文件具有相似的名称,并且将打开错误的文件.
是否有任何已经实现的方法可以将选择扩展到整行?我试图谷歌问题,但没有什么会选择整行文本.
一个例子:
http://i47.tinypic.com/wvol6a.png
谢谢大家的意见,我很抱歉我不清楚JTextArea,JTextArea是强制性的.
我现在已经解决了我的问题,我感谢Hovercraft Full Of Eels.
您最好的选择是使用上面许多人推荐的JList.如果你必须使用JTextArea,那么这可以完成,但你需要使用JTextArea的viewToModel(Point p)方法将鼠标按位置的Point转换为文本中的偏移位置.然后,您可以使用javax.swing.text.Utilities类的静态实用程序方法getRowStart(…)和getRowEnd(…)来查找所选行的开头和结尾.例如,我的SSCCE:import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Random; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.text.BadLocationException; import javax.swing.text.Utilities; public class GetLineFromTextArea { private static final int MIN_CHARS = 4; private static final int MAX_CHARS = 8; private static final int WORDS_PER_LINE = 10; private static final int ROWS = 30; public static void main(String[] args) { Random random = new Random(); final JTextArea textArea = new JTextArea(20, 50); JScrollPane scrollpane = new JScrollPane(textArea); StringBuilder sb = new StringBuilder(); for (int row = 0; row < ROWS ; row++) { sb = new StringBuilder(); for (int words = 0; words < WORDS_PER_LINE; words++) { int maxChars = random.nextInt(MAX_CHARS - MIN_CHARS) + MIN_CHARS; for (int charsPerWord = 0; charsPerWord < maxChars; charsPerWord++) { char c = (char) (random.nextInt('z' - 'a' + 1) + 'a'); sb.append(c); } sb.append(" "); } textArea.append(sb.toString() + "\n"); } textArea.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getButton() != MouseEvent.BUTTON1) { return; } if (e.getClickCount() != 2) { return; } int offset = textArea.viewToModel(e.getPoint()); try { int rowStart = Utilities.getRowStart(textArea, offset); int rowEnd = Utilities.getRowEnd(textArea, offset); String selectedLine = textArea.getText().substring(rowStart, rowEnd); System.out.println(selectedLine); } catch (BadLocationException e1) { e1.printStackTrace(); } } }); JOptionPane.showMessageDialog(null, scrollpane); } }