protected void label_8_mousePressed(MouseEvent e) {
((JLabel)e.getSource()).setBorder(new LineBorder(Color.BLACK,1));
}protected void label_8_mouseReleased(MouseEvent e) {
((JLabel)e.getSource()).setBorder(null);
}
当鼠标按下就显示边框,鼠标松开就去掉边框,来模拟按钮的点击效果但是我如何在鼠标按下去之后显示一个 JFileChooser 。 那么鼠标松开的时候就不会触发label_8_mouseReleased 这个事件。我手动调用label_8_mouseReleased事件的话,却达不到模拟的点击效果。怎么解决呢。

解决方案 »

  1.   

    看样子你是对某个按钮进行了侦听,提供一个思路。对这个按钮的侦听重新定义鼠标事件,在mouseReleased方法里面什么也不写,否则看你现在的语法,只要鼠标松开一定会执行label_8_mouseReleased这个方法
      

  2.   

      我是用一个JLable来做个图片按钮。。
      

  3.   

    private class Label_8MouseListener extends MouseAdapter {
    public void mousePressed(MouseEvent e) {
    label_8_mousePressed(e);
    }
    public void mouseReleased(MouseEvent e) {
    label_8_mouseReleased(e);
    }
    }
    protected void label_8_mousePressed(MouseEvent e) {
    JLabel temp = (JLabel)e.getSource();
    temp.setBorder(new LineBorder(Color.BLACK,1));
    if(temp.getName().equals("file")){
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    int result = fileChooser.showSaveDialog(this);
    if(result == JFileChooser.CANCEL_OPTION){
    return ;
    }

    File fileName = fileChooser.getSelectedFile();

    path.setText(fileName.toString());
    }
    }
    protected void label_8_mouseReleased(MouseEvent e) {
    ((JLabel)e.getSource()).setBorder(null);
    }
    这是比较完整的代码。。
      

  4.   

    那你直接把public void mouseReleased(MouseEvent e) {
                label_8_mouseReleased(e);
            }
    改成public void mouseReleased(MouseEvent e) {
               
            }
    就可以了啊
      

  5.   

    我刚才去掉了JFileChooser  是弹出普通的JFrame。那个事件是触发的, 是不是应为是模态的关系,阻塞了事件。。?
      

  6.   

    我觉得你直接用 Button 不就蛮好的嘛
    Button 有什么不能满足你的需求一定要用 Label 代替的呢?
    如果想透明 setContentAreaFilled(false); 就行如果边框有什么特别要求,那就自己写个边框类
    public class ButtonBorder extends AbstractBorder {

    @Override
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
    AbstractButton button = (AbstractButton)c;
    ButtonModel model = button.getModel();
    if (!c.isEnabled()) {
    g.setColor(Color.gray);
    g.drawRect(x, y, width - 1, height - 1);
    } else if (model.isPressed()) {
    g.setColor(Color.black);
    g.drawRect(x, y, width - 1, height - 1);
    } else {

    }
    } @Override
    public Insets getBorderInsets(Component c) {
    return new Insets(1, 1, 1, 1);
    } @Override
    public Insets getBorderInsets(Component c, Insets insets) {
    insets.top = 1;
    insets.left = 1;
    insets.bottom = 1;
    insets.right = 1;
    return insets;
    } }