好问题,呵呵。可以认真学习一下java的listener解决方案。如下,使用三种listener来完成(MouseListener,MouseMontionListner,KeyListener),可以copy代码后直接运行:import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class Test extends JFrame{
JTextArea txt;
JButton btn;
public Test(){
txt=new JTextArea(10,30);
btn=new JButton("copy");
btn.setEnabled(false);
getContentPane().add(txt);
getContentPane().add(btn,BorderLayout.SOUTH);
MyListener lis=new MyListener();
txt.addMouseMotionListener(lis);
txt.addMouseListener(lis);
txt.addKeyListener(lis);
pack();
setVisible(true);
}
public static void main(String[] args){
Test t=new Test();
}
private boolean isTextSelected(){
return (txt.getSelectionEnd() - txt.getSelectionStart())!=0;
}
class MyListener extends MouseAdapter implements MouseMotionListener,KeyListener{
public void mouseDragged(MouseEvent e){
if(isTextSelected()){
btn.setEnabled(true);
}else{
btn.setEnabled(false);
}
}
public void mouseMoved(MouseEvent e){
//do nothing
}
public void mouseReleased(MouseEvent e){
if(isTextSelected()){
btn.setEnabled(true);
}else{
btn.setEnabled(false);
}
}
public void keyPressed(KeyEvent e){
//do nothing
}
public void keyReleased(KeyEvent e){
if(e.isShiftDown()){
int code=e.getKeyCode();
if(isArrowKey(code)){
if(isTextSelected()){
btn.setEnabled(true);
}else{
btn.setEnabled(false);
}
}
}else{
if(!isTextSelected()){
btn.setEnabled(false);
}else{
btn.setEnabled(true);
}
}
}
public void keyTyped(KeyEvent e){
//do nothing
}
private boolean isArrowKey(int keyCode){
return (keyCode==KeyEvent.VK_DOWN ||
keyCode==KeyEvent.VK_UP ||
keyCode==KeyEvent.VK_LEFT ||
keyCode==KeyEvent.VK_RIGHT
);
}
}
}
import java.awt.*;
import java.awt.event.*;public class Test extends JFrame{
JTextArea txt;
JButton btn;
public Test(){
txt=new JTextArea(10,30);
btn=new JButton("copy");
btn.setEnabled(false);
getContentPane().add(txt);
getContentPane().add(btn,BorderLayout.SOUTH);
MyListener lis=new MyListener();
txt.addMouseMotionListener(lis);
txt.addMouseListener(lis);
txt.addKeyListener(lis);
pack();
setVisible(true);
}
public static void main(String[] args){
Test t=new Test();
}
private boolean isTextSelected(){
return (txt.getSelectionEnd() - txt.getSelectionStart())!=0;
}
class MyListener extends MouseAdapter implements MouseMotionListener,KeyListener{
public void mouseDragged(MouseEvent e){
if(isTextSelected()){
btn.setEnabled(true);
}else{
btn.setEnabled(false);
}
}
public void mouseMoved(MouseEvent e){
//do nothing
}
public void mouseReleased(MouseEvent e){
if(isTextSelected()){
btn.setEnabled(true);
}else{
btn.setEnabled(false);
}
}
public void keyPressed(KeyEvent e){
//do nothing
}
public void keyReleased(KeyEvent e){
if(e.isShiftDown()){
int code=e.getKeyCode();
if(isArrowKey(code)){
if(isTextSelected()){
btn.setEnabled(true);
}else{
btn.setEnabled(false);
}
}
}else{
if(!isTextSelected()){
btn.setEnabled(false);
}else{
btn.setEnabled(true);
}
}
}
public void keyTyped(KeyEvent e){
//do nothing
}
private boolean isArrowKey(int keyCode){
return (keyCode==KeyEvent.VK_DOWN ||
keyCode==KeyEvent.VK_UP ||
keyCode==KeyEvent.VK_LEFT ||
keyCode==KeyEvent.VK_RIGHT
);
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货