使用 JButton 作为图像

Use JButton as an Image

所以,我面临的问题是我想采用 JButton 的图像模型,并将其用作图像。我以前没有在 swing 中实现图标,所以我决定进行一些搜索。但是,我找不到任何可以理解这里发生的事情的东西。

我试过以下代码:

JButton button = new JButton("Text");
JLabel buttonIcon = new JLabel(button.getIcon());

但是,当我去显示 JLabel 时,什么也没有出现。这个交互有错吗?

我也很满意将 JButton 的模型保存为图像格式,然后将其导入。

如有任何帮助,我们将不胜感激!

试试这个

File imgFile=new File("img.jpeg");
Image img=ImageIO.read(imgFile);
ImageIcon icon=new ImageIcon(img);
JButton button=new JButton();
JLabel label=new JLabel();
button.setIcon(icon);
label.setIcon(button.getIcon());

因此,如果您想对可见组件进行快照并将其显示在 JLabel 中,您可以

  1. 将按钮的 size 设置为 preferredSize
  2. 创建 BufferedImage.
  3. 调用 button.paint(image.createGraphics()) 将按钮绘制到图像上。
  4. JLabelIcon 设置为包含该图像的新图像。

这是一个示例(感谢 camickr 使流程更清洁):

import java.awt.Component;
import java.awt.EventQueue;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Example {

    public void createAndShowGUI() {
        JButton button = new JButton("Text");
        button.setSize(button.getPreferredSize());

        JLabel label = new JLabel();
        label.setIcon(new ImageIcon(snapshot(button)));

        JPanel contentPane = new JPanel();
        contentPane.add(label);

        JFrame frame = new JFrame();
        frame.setContentPane(contentPane);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private BufferedImage snapshot(Component component) {
        BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(),
                BufferedImage.TYPE_INT_RGB);
        component.paint(image.createGraphics());
        return image;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> new Example().createAndShowGUI());
    }
}