且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用 JPanel 作为 JButton?

更新时间:2023-11-27 11:48:58

这是一个快速演示,向您展示如何使用边框来模拟按钮.

Here is a quick demo, to show you how you could use borders to simulate a button.

该演示还对鼠标和按键事件做出反应:

The demo also reacts to mouse and key events :

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;

public class JPanelButton extends JPanel {

    Border raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
    Border loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);

    public static void main(final String[] args) {

        JFrame frame = new JFrame();

        final JPanelButton panel = new JPanelButton();
        panel.raiseBorder();

        panel.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(final MouseEvent e) {
                panel.lowerBorder();

            }

            @Override
            public void mouseReleased(final MouseEvent e) {
                panel.raiseBorder();

            }

        });

        panel.setFocusable(true); // you need this or the panel won't get the key events
        panel.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(final KeyEvent e) {
                panel.lowerBorder();

            }

            @Override
            public void keyReleased(final KeyEvent e) {
                panel.raiseBorder();

            }
        });

        frame.setContentPane(panel);
        frame.setSize(100, 100);
        frame.setVisible(true);

    }

    public void raiseBorder() {

        setBorder(raisedetched);
    }

    public void lowerBorder() {

        setBorder(loweredetched);
    }

}