Max*_*boy 6 java swing jtextarea
我有一个JFrame,显示存储在我的计算机上的当前电影.它将文件的名称显示为String
a中的s JTextArea
.
我想要做的是双击一个特定的String
(代表我的计算机上的实际文件),该文件将被打开.
开口部分,并双击一部分已经解决了,但是当我在双击String
我JTextArea
只是其中的一部分String
将被选中.(我正在使用JTextArea.getSelectedText()
).
我想要的是整体String
被选中,我可以找回String
.我需要这样做,因为我的一些电影文件具有相似的名称,并且将打开错误的文件.
是否有任何已经实现的方法可以将选择扩展到整行?我试图谷歌问题,但没有什么会选择整行文本.
一个例子: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);
}
}
Run Code Online (Sandbox Code Playgroud)