Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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上(而不是内部)放置一个图像,并使JButton仍然工作_Java_Image_Swing_Jframe_Jbutton - Fatal编程技术网

Java 在JButton上(而不是内部)放置一个图像,并使JButton仍然工作

Java 在JButton上(而不是内部)放置一个图像,并使JButton仍然工作,java,image,swing,jframe,jbutton,Java,Image,Swing,Jframe,Jbutton,我现在想做的是在JButton上放一张图片,然后仍然可以点击按钮。我的意思不是像图标一样把图像放进按钮。我的意思是在JFrame中有一个图像,图像后面有一个按钮,可以点击它。感谢所有的帮助 import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JButton; public class ButtonImage extends JFrame{ static JButton save;

我现在想做的是在
JButton
上放一张图片,然后仍然可以点击按钮。我的意思不是像图标一样把图像放进按钮。我的意思是在
JFrame
中有一个图像,图像后面有一个按钮,可以点击它。感谢所有的帮助

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JButton;

public class ButtonImage extends JFrame{

    static JButton save;
    JButton cancel;
    ButtonImage(){
            save = new JButton("Save");
            cancel = new JButton("Cancel");

            setLayout(new FlowLayout());
            add(save);
            add(cancel);

            setVisible(true);
            setSize(400,300);
            setLocation(500,400);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setLayout(null);
    }

    public static void main(String[]args){
            new ButtonImage();
            save.setBounds(100,200,90,30);
    }        
}

如果图像完全覆盖了按钮,只需在图像上放置一个单击侦听器,然后忘记按钮。或者更好的是,
JButton
可以将图像作为其内容,因此更改JButton的外观,使其不绘制按钮边框,然后添加图像

如果这些技术对你不起作用(比如说你想部分地看到图像后面的按钮),那么仍然要考虑把图像放在按钮中,但是把你的图像堆叠起来,以包含可见的按钮的一部分。 这有很多很好的理由

  • 你不必担心争夺焦点,因此你的图像无法承受鼠标点击
  • 选项卡和箭头热键将正常工作,“回车单击”行为也会正常工作
  • 您的代码将读得更好,这将帮助您更快地完成项目,并易于维护

  • 现在,如果图像从未与按钮重叠,则只需在按钮上方布置一个图像;然而,在您的撰写过程中,似乎您正在尝试做一些完全不同的事情。

    欢迎使用堆栈溢出,请使用。请将您的代码放在问题中(而不是作为场外链接)为了避免链接腐烂,这会使您的问题在将来变得毫无用处。您可以使用
    鼠标侦听器来代替按钮,这样当鼠标单击某个区域时,您可以执行代码(无需按钮,假设您想将按钮隐藏在图像后面)“以及该图像后面的按钮”听起来像是另一个正在制作中的“无法使用的GUI”。为了最终用户的利益,我希望放弃这种胡说八道。但是,
    JButton
    支持图像…为什么要重新发明轮子…为什么还要使用
    null
    布局…听起来你几乎想要一个图像作为面板的背景,面板上有一个按钮。如果是这样的话,就有了plen这里有太多的例子,例如:这里是一个将图像平铺分割成4个按钮和5个标签的例子。作为通常聚焦指示的替代,它使用了一个带有(粗糙的)红色边框的“聚焦”图像。编辑:哎呀!我说的“聚焦”是指“按下”。)@AndrewThompson谢谢你的例子。我同意红色边框看起来不太好,可惜他们没有使用按钮对多个图像的支持,包括一个“onenterned”图像和一个“onClicked”图像。作为我,他们不想让代码太长!;)@安德烈·汤普森:很高兴认识你。我怀疑,如果有人付出了那么多的努力(看起来真的很好),那么红色边框是实现明显的基于图像的高亮显示的中间步骤。干得不错,真的很好看。