如何使用 JPanel 作为 JButton? [英] How to use a JPanel as JButton?

查看:34
本文介绍了如何使用 JPanel 作为 JButton?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须使用 Swing-ui 设计器工具来创建我的 UI,该工具仅支持以图形方式编辑 JPanel.这些面板(它们基本上包含复杂的按钮设计)像 JButton 一样工作.我不能使用 JPanel 以外的任何东西作为这些面板的基类(UI 编辑器限制).

I must use a swing-ui designer tool to create my UI, that only supports graphically editing JPanels. Those panels (they basically contain complex button designs) to work like a JButton. I cannot use anything other than JPanel as base class of these panels (UI editor limitation).

最通用的解决方案是什么?

What is the most generic solution to do this?

  • 创建一个自定义按钮,使用面板的绘制方法而不是它自己的?
  • 创建一个基础面板类,重新实现整个按钮?
  • 另一个更优雅的解决方案?

推荐答案

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

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);
    }

}

这篇关于如何使用 JPanel 作为 JButton?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆