好问题,呵呵。可以认真学习一下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
);
}


}

}