Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JButton子类不更改透明度_Java_Swing_Jbutton_Superclass - Fatal编程技术网

Java JButton子类不更改透明度

Java JButton子类不更改透明度,java,swing,jbutton,superclass,Java,Swing,Jbutton,Superclass,我想制作一个透明的按钮,直到用户用鼠标悬停在它上面,所以我创建了自己的类来扩展JButton。我对它进行了测试,它确实使按钮透明,并在用户将鼠标悬停在按钮上时进行检测,但之后它不会使按钮不透明。使用此代码需要更改什么 import javax.swing.*; import java.awt.event.*; public class TransparentButton extends JButton { boolean opaque = false, areaFilled = fa

我想制作一个透明的按钮,直到用户用鼠标悬停在它上面,所以我创建了自己的类来扩展JButton。我对它进行了测试,它确实使按钮透明,并在用户将鼠标悬停在按钮上时进行检测,但之后它不会使按钮不透明。使用此代码需要更改什么

import javax.swing.*;
import java.awt.event.*;

public class TransparentButton extends JButton {

    boolean opaque = false, areaFilled = false, borderPainted = false;

    public TransparentButton(Icon icon) {
        super(icon);
        initialise();
    }

    public TransparentButton(String text) {
        super(text);
        initialise();
    }

    private void initialise() {
        super.setOpaque(opaque);
        super.setContentAreaFilled(areaFilled);
        super.setBorderPainted(borderPainted);
        super.addMouseListener(new MouseListener() {
            public void mouseEntered(MouseEvent e) {
                opaque = true;
                areaFilled = true;
                borderPainted = true;
            }

            public void mouseExited(MouseEvent e) {
                opaque = false;
                areaFilled = false;
                borderPainted = false;
            }

            public void mouseClicked(MouseEvent e) {}
            public void mousePressed(MouseEvent e) {}
            public void mouseReleased(MouseEvent e) {}
        });
    }
}

设置变量是不够的。您还必须在按钮上调用相应的方法:

        public void mouseEntered(MouseEvent e) {
                super.setOpaque(true);
                super.setContentAreaFilled(true);
                super.setBorderPainted(true);

        }

        public void mouseExited(MouseEvent e) {
                super.setOpaque(false);
                super.setContentAreaFilled(false);
                super.setBorderPainted(false);

        }

附言:我没有测试它。但这在逻辑上似乎很明显,仅仅设置变量是不够的。您还必须在按钮上调用相应的方法:

        public void mouseEntered(MouseEvent e) {
                super.setOpaque(true);
                super.setContentAreaFilled(true);
                super.setBorderPainted(true);

        }

        public void mouseExited(MouseEvent e) {
                super.setOpaque(false);
                super.setContentAreaFilled(false);
                super.setBorderPainted(false);

        }
import javax.swing.*;
import java.awt.event.*;

public class TransparentButton extends JButton {

    boolean opaque = false, areaFilled = false, borderPainted = false;

    public TransparentButton(Icon icon) {
        super(icon);
        initialise();
    }

    public TransparentButton(String text) {
        super(text);
        initialise();
    }

    private void initialise() {

        super.addMouseListener(new MouseListener() {
            public void mouseEntered(MouseEvent e) {
                opaque = true;
                areaFilled = true;
                borderPainted = true;
                reset();

            }

            public void mouseExited(MouseEvent e) {
                opaque = false;
                areaFilled = false;
                borderPainted = false;
                reset();
            }

            public void mouseClicked(MouseEvent e) {}
            public void mousePressed(MouseEvent e) {}
            public void mouseReleased(MouseEvent e) {}
        });
    }

    private void reset() {
        super.setOpaque(opaque);
        super.setContentAreaFilled(areaFilled);
        super.setBorderPainted(borderPainted);
    }
}

附言:我没有测试它。但这在逻辑上似乎很明显,enoguh

布尔不透明=假,areaFilled=假,BorderPaint=假;
import javax.swing.*;
import java.awt.event.*;

public class TransparentButton extends JButton {

    boolean opaque = false, areaFilled = false, borderPainted = false;

    public TransparentButton(Icon icon) {
        super(icon);
        initialise();
    }

    public TransparentButton(String text) {
        super(text);
        initialise();
    }

    private void initialise() {

        super.addMouseListener(new MouseListener() {
            public void mouseEntered(MouseEvent e) {
                opaque = true;
                areaFilled = true;
                borderPainted = true;
                reset();

            }

            public void mouseExited(MouseEvent e) {
                opaque = false;
                areaFilled = false;
                borderPainted = false;
                reset();
            }

            public void mouseClicked(MouseEvent e) {}
            public void mousePressed(MouseEvent e) {}
            public void mouseReleased(MouseEvent e) {}
        });
    }

    private void reset() {
        super.setOpaque(opaque);
        super.setContentAreaFilled(areaFilled);
        super.setBorderPainted(borderPainted);
    }
}
不透明、areaFilled和BorderPaint字段是计算的局部变量。 改变它不会影响晚餐课

set不透明、setContentAreaFilled和setOrderPaint方法背后有很多逻辑
您应该使用它

布尔不透明=假,areaFilled=假,BorderPaint=假; 不透明、areaFilled和BorderPaint字段是计算的局部变量。 改变它不会影响晚餐课

set不透明、setContentAreaFilled和setOrderPaint方法背后有很多逻辑 你应该使用它
  • 对于您的代码,您必须添加,但最好是

  • 在鼠标/更改事件中,您必须更改

      • 对于您的代码,您必须添加,但最好是

      • 在鼠标/更改事件中,您必须更改