JTextArea中的数据显示在文本框中 我的需求是把JtextArea中有很多行的数据,当我点击其中的一行时就把数据显示到一个JtextField中 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 并且在JtextArea中把哪行数据删除!请大家帮帮忙,就是不知道那个点击一行数据进行传输! 不知道怎么做。。如果是选中那一行还好说,或者不用JtextArea而用JList 在你鼠标点击JtextArea时,用getCaretPosition()方法可以取得你的光标位置然后从光标位置向前找到第一个遇到的'\n'的位置start,向后也找到第一个遇到的'\n'位置end这两个位置中间就是该行的数据,用getText(start,end - start) 取到一个字符串 str当中然后用replaceRange("" ,start,end)方法把JtextArea中的这段给删了再用setText(str) 写到JtextField中 int caretOffset = jtextarea.getCaretPostion();int currentLine = jtextarea.getLineOfOffset(caretOffset);int lineStart = jtextarea.getLineStartOffset(currentLine);int lineEnd = jtextarea.getLineEndOffset(currentLine);String currentLineContent = jtextarea.getText().substring(lineStart,lineEnd);jtextfield.setText(currentLineContent);jtextarea.replaceRange("",lineStart,lineEnd); 要双击的话无非是对MouseListener的处理第一种方法是用Timer来做一个处理,第一次mouseClicked之后启动一个Task将一个标志至上在有这个标志的时候,再次mouseClicked,才会触发数据转换的事件在一定时间之后,或者是鼠标再次mouseClicked后清除这个标志第二种是比较取巧的方法,每次mouseClicked时,判断光标的位置,如果连续两次一样,就认为是双击另外鉴于mouseClicked事件要求鼠标在按下和弹起的过程中不能有移动,建议用mousePressed事件代替mouseClicked事件 取巧的方法 private int click = 0; private int lastPos = -1; private JTextArea area = new JTextArea(); private JTextField field = new JTextField(); private void dataTrans() throws BadLocationException { int caretOffset = area.getCaretPosition(); int currentLine = area.getLineOfOffset(caretOffset); int lineStart = area.getLineStartOffset(currentLine); int lineEnd = area.getLineEndOffset(currentLine); String currentLineContent = area.getText().substring(lineStart,lineEnd); field.setText(currentLineContent); area.replaceRange("",lineStart,lineEnd); } private void addListener() { area.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e){ if (click == 0) { click++; } else { if (lastPos == area.getCaretPosition()) { try { dataTrans(); } catch (BadLocationException e1) { e1.printStackTrace(); } } click = 0; } lastPos = area.getCaretPosition(); } }); } 用Timer的方式 private int click = 0; private int lastPos = -1; private JTextArea area = new JTextArea(); private JTextField field = new JTextField(); private Timer timer = new Timer(); private TimerTask task = new TimerTask() { public void run() { click--;//当第一次点击的时候会给click一个大于0的值 if (click < 0) { click = 0; } } }; private void dataTrans() throws BadLocationException { int caretOffset = area.getCaretPosition(); int currentLine = area.getLineOfOffset(caretOffset); int lineStart = area.getLineStartOffset(currentLine); int lineEnd = area.getLineEndOffset(currentLine); String currentLineContent = area.getText().substring(lineStart,lineEnd); field.setText(currentLineContent); area.replaceRange("",lineStart,lineEnd); } private void addListener() { timer.schedule(task, 100, 100); area.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e){ if (click > 0) { if (lastPos == area.getCaretPosition()) { try { dataTrans(); } catch (BadLocationException e1) { e1.printStackTrace(); } } click = 0; } else { click = 10;//当第一次点击的时候给click赋值10,这相当于1秒,在这1秒内再次点击就认为是双击 } lastPos = area.getCaretPosition(); } }); } 刚参加笔试回来,给点题目大侠们看看 摘要认证时怎么回事? 请教下分支定界怎么写.. 请高手帮忙....请教java读写文本文件的方法,做好带代码 请帮帮忙,在Java2D中,如何压缩字体 socket类中isClosed()和isConneted()方法的问题 我装了jbuilder9,怎么设置环境变量, 谁有RowSet的实现包,给我发一个? mail: [email protected] 我初学java啊~!希望多交些这方面的大虾啊~!我的qq是712779 小程序编译不通,帮忙纠错! java 的加密解密 急 熟悉的进来看看 求代码 线程同步的问题,!请赐教.
然后从光标位置向前找到第一个遇到的'\n'的位置start,向后也找到第一个遇到的'\n'位置end
这两个位置中间就是该行的数据,用getText(start,end - start) 取到一个字符串 str当中
然后用replaceRange("" ,start,end)方法把JtextArea中的这段给删了
再用setText(str) 写到JtextField中
int currentLine = jtextarea.getLineOfOffset(caretOffset);
int lineStart = jtextarea.getLineStartOffset(currentLine);
int lineEnd = jtextarea.getLineEndOffset(currentLine);
String currentLineContent = jtextarea.getText().substring(lineStart,lineEnd);jtextfield.setText(currentLineContent);
jtextarea.replaceRange("",lineStart,lineEnd);
在有这个标志的时候,再次mouseClicked,才会触发数据转换的事件
在一定时间之后,或者是鼠标再次mouseClicked后清除这个标志第二种是比较取巧的方法,每次mouseClicked时,判断光标的位置,如果连续两次一样,就认为是双击另外鉴于mouseClicked事件要求鼠标在按下和弹起的过程中不能有移动,
建议用mousePressed事件代替mouseClicked事件
private int lastPos = -1;
private JTextArea area = new JTextArea();
private JTextField field = new JTextField();
private void dataTrans() throws BadLocationException {
int caretOffset = area.getCaretPosition();
int currentLine = area.getLineOfOffset(caretOffset);
int lineStart = area.getLineStartOffset(currentLine);
int lineEnd = area.getLineEndOffset(currentLine);
String currentLineContent = area.getText().substring(lineStart,lineEnd);
field.setText(currentLineContent);
area.replaceRange("",lineStart,lineEnd);
}
private void addListener() {
area.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
if (click == 0) {
click++;
} else {
if (lastPos == area.getCaretPosition()) {
try {
dataTrans();
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
click = 0;
}
lastPos = area.getCaretPosition();
}
});
}
private int lastPos = -1;
private JTextArea area = new JTextArea();
private JTextField field = new JTextField();
private Timer timer = new Timer();
private TimerTask task = new TimerTask() {
public void run() {
click--;//当第一次点击的时候会给click一个大于0的值
if (click < 0) {
click = 0;
}
}
};
private void dataTrans() throws BadLocationException {
int caretOffset = area.getCaretPosition();
int currentLine = area.getLineOfOffset(caretOffset);
int lineStart = area.getLineStartOffset(currentLine);
int lineEnd = area.getLineEndOffset(currentLine);
String currentLineContent = area.getText().substring(lineStart,lineEnd);
field.setText(currentLineContent);
area.replaceRange("",lineStart,lineEnd);
}
private void addListener() {
timer.schedule(task, 100, 100);
area.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
if (click > 0) {
if (lastPos == area.getCaretPosition()) {
try {
dataTrans();
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
click = 0;
} else {
click = 10;//当第一次点击的时候给click赋值10,这相当于1秒,在这1秒内再次点击就认为是双击
}
lastPos = area.getCaretPosition();
}
});
}