Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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_Jlabel - Fatal编程技术网

Java 使用JButton作为图像

Java 使用JButton作为图像,java,swing,jbutton,jlabel,Java,Swing,Jbutton,Jlabel,所以,我面临的问题是,我想采用JButton的图像模型,并将其用作图像。我以前没有在swing中实现过图标,所以我决定做一些搜索。然而,我找不到任何东西来解释这里发生的事情 我尝试了以下代码: JButton button = new JButton("Text"); JLabel buttonIcon = new JLabel(button.getIcon()); 但是,当我去显示JLabel时,什么也没有出现。这种互动是错误的吗 我还可以将JButton的模型保存为图像格式,并将其导入 任

所以,我面临的问题是,我想采用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());
试试这个

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
中,您可以

  • 将按钮的
    大小设置为
    首选大小
  • 创建一个
    buffereImage
  • 调用
    button.paint(image.createGraphics())
    将按钮绘制到图像上
  • JLabel
    图标设置为包含图像的新图标

  • 以下是一个示例(感谢camickr使流程更干净):


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

  • 将按钮的
    大小设置为
    首选大小
  • 创建一个
    buffereImage
  • 调用
    button.paint(image.createGraphics())
    将按钮绘制到图像上
  • JLabel
    图标设置为包含图像的新图标

  • 以下是一个示例(感谢camickr使流程更干净):


    我有点搞不懂你想要实现什么。是否要在
    JLabel
    中显示
    按钮的
    图标
    ?还是要在
    JLabel
    中显示
    JButton
    的图像?顺便说一句,
    JButton
    不扩展
    JLabel
    ,因此
    JLabel buttonIcon=newjbutton(button.getIcon())将抛出一个错误。@LukasRotter抱歉,这是一个输入错误。”。我已经修复了试图将JLabel设置为JButton的部分。我基本上想看看JButton的外观,并将其创建为一个无法交互的对象。编辑:在JLabel中显示Jbutton图像。您应该能够将Jbutton绘制为图像,并在JLabel上进行设置。另一个选择是更改JLabel的UI类,使其最终以与按钮相同的方式绘制图像。您也可以检查可重用类以获取组件的图像。我有点搞不清楚您想要实现什么。是否要在
    JLabel
    中显示
    按钮的
    图标
    ?还是要在
    JLabel
    中显示
    JButton
    的图像?顺便说一句,
    JButton
    不扩展
    JLabel
    ,因此
    JLabel buttonIcon=newjbutton(button.getIcon())将抛出一个错误。@LukasRotter抱歉,这是一个输入错误。”。我已经修复了试图将JLabel设置为JButton的部分。我基本上想看看JButton的外观,并将其创建为一个无法交互的对象。编辑:在JLabel中显示Jbutton图像。您应该能够将Jbutton绘制为图像,并在JLabel上进行设置。另一个选项是更改JLabel的UI类,使其最终以与按钮相同的方式绘制图像。您也可以检查可重用类以获取组件的图像。(1+)但为了使过程更干净1)无需重新绘制标签。当属性更改时,Swing组件将在自身上调用
    revalidate()
    repaint()
    。2) 无需将按钮添加到面板以获取其图像。你需要a)使用
    button.setSize(button.getPreferredSize()
    和b)将paintAll(…)更改为
    paint(…)
    。这正是我需要的。非常感谢卢卡斯和卡米克尔!(1+)但为了使过程更清洁1)无需重新油漆标签。当属性更改时,Swing组件将在自身上调用
    revalidate()
    repaint()
    。2) 无需将按钮添加到面板以获取其图像。你需要a)使用
    button.setSize(button.getPreferredSize()
    和b)将paintAll(…)更改为
    paint(…)
    。这正是我需要的。非常感谢卢卡斯和卡米克尔!我投了反对票,因为OP想要显示实际按钮的图像,而不是按钮的
    图标
    。我投了反对票,因为OP想要显示实际按钮的图像,而不是按钮的
    图标