当前位置: 首页 > 知识库问答 >
问题:

在圆形JLabel图像周围创建一个可单击区域

谢誉
2023-03-14

我试图创建一个具有椭圆形图像的JLabel,如下所示。

我的代码如下:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public final class RoundedButtonDemo {
    private static Image bi;

    public static void main(String[] args) {
        try {
            loadImage();

            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    createAndShowGUI();
                }
            });
        } catch (IOException e) {
            // handle exception
        }
    }

    private static void loadImage() throws IOException {
        int newWidth = 80;
        int newHeight = 40;
        bi = ImageIO.read(RoundedButtonDemo.class.getResource("/resources/login.png"));
        bi = bi.getScaledInstance(newWidth, newHeight, Image.SCALE_DEFAULT);

    }

    private static void createAndShowGUI() {
        final JFrame frame = new JFrame();
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JLabel label = new JLabel();
        label.setSize(new Dimension(5, 5));
        label.setIcon(new ImageIcon(bi));
        label.setText("Hello World");
        label.setHorizontalTextPosition(JLabel.CENTER);
        // label.setBorder(BorderFactory.createLineBorder(Color.BLACK));

        label.addMouseListener(new MouseListener() {

            private int count = 0;

            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getSource() == label) {
                    if (count % 2 == 0) {
                        label.setText("Bye");
                    } else {
                        label.setText("Hello World");
                    }

                    count++;
                }
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseExited(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mousePressed(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseReleased(MouseEvent e) {
                // TODO Auto-generated method stub

            }
        });

        frame.add(label);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

这段代码创建一个jlabel包含上面的图像。每次单击按钮时,JLabel的文本应该根据添加到JLabelmouselistener中的JLabel替换。

我想要实现的目标是:一个圆角按钮,它响应mouselistener,只要在其表面的任何地方单击它。

共有1个答案

左丘繁
2023-03-14

我试过你的密码了。之所以出现这种行为,是因为jlabel实际上填满了整个框架。您需要为您的框架设置布局;类似于这样:

// ...
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());             // <-- you need this

final JLabel label = new JLabel();
label.setPreferredSize(new Dimension(80, 40)); // <-- also this
label.setIcon(new ImageIcon(bi));
label.setText("Hello World");
// ...

FlowLayout是最简单的布局管理器之一,其中有很多。您可以在下面阅读有关它们的内容:https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

希望这能有所帮助。

// label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
 类似资料:
  • 我想将方形图像转换为圆形图像,但当我应用“边框半径:50px”时,它给了我椭圆形的形状。我尝试了很多东西,但都不起作用。任何帮助都将不胜感激。这是我的超文本标记语言代码- <代码> 这是我的CSS代码- 这是我的图片在网站上的样子。我希望它们有一个圆形。

  • 本文向大家介绍怎样在页面上实现一个圆形的可点击区域?相关面试题,主要包含被问及怎样在页面上实现一个圆形的可点击区域?时的应答技巧和注意事项,需要的朋友参考一下 这个问题也可以理解为做一个圆。方案为两种,真的圆和模拟圆 map+area , demo 圆角属性(楼上的2.3.4) 判断圆心点和单击点的距离是不是在半径中。(楼上1方案) svg圆

  • 如何创建类似于< code > floating action button 的东西?

  • 我正在使用以下代码创建一个围绕JPanel的边框: 创建一个固定的边框不应该这么难,我做错了什么?

  • 问题内容: 我正在使用和在CSS中创建一个半透明的圆圈。 在这个圆的周围,我希望有另一个完全透明的边界(例如10个像素),而又想有另一个半透明的边界(10个像素)。 这是我创建圈子的方式: 我需要怎么做才能在现有边界周围创建另一个边界,然后再创建另一个边界? 问题答案: 您可以使用简单的边框并将背景裁剪到,以在填充区域中创建透明部分: 您也可以考虑 您可以轻松缩放到任意数量的边界:

  • 主要活动。xml 这是一张圆形的照片。xml: 我尝试了一些阴影效果的代码,但它不起作用。