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

为什么带有背景图像的JFrame上的按钮不能正确显示

凌蕴藉
2023-03-14

我最近编写了一个包含背景图像的系统主页。设置背景后,我创建的按钮无法正确显示。它只是在我使用鼠标并指向按钮的位置后出现的。有人能教我如何解决这个问题吗?谢谢你的帮助。代码如下:

公共类主页扩展JFrame{

private JPanel button = new JPanel();
private JButton time = new JButton("Bus Schedule");
private JButton reserve = new JButton("Booking");
private JButton info = new JButton("About Us");
Container con = getContentPane();


public HomePage(){

    setTitle("Bus Reservation System");
    setSize(650,500);
    setLocation(360,100);
    setVisible(true);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    setBackground();
    setButton();
}


public void setBackground(){

    JLabel background = new JLabel(new ImageIcon("C:/User/Desktop/Assignment/bg.jpg"));
    con.add(background);
    background.setLayout(new FlowLayout());
    con.add(button);

}


public void setButton(){

    Font but = new Font("Serif" , Font.ITALIC , 20);

    info.setFont(but);
    time.setFont(but);
    reserve.setFont(but);

    button.add(info);
    button.add(time);
    button.add(reserve);

    con.add(button);

}

共有3个答案

段干弘毅
2023-03-14

首先,如前所述,在JFrame上调用setViable(true)之前,应将所有组件添加到框架中。

JLabel background = new JLabel(new ImageIcon("C:/User/Desktop/Assignment/bg.jpg"));
con.add(background);
background.setLayout(new FlowLayout());
con.add(button);

根据上面的代码,您将向内容窗格添加两个组件,因此GUI的层次结构如下所示:

- frame
    - content pane
        - background
        - button

在我看来,您希望您的GUI如下所示:

- frame
    - content pane
        - background
            - button

所以你的代码应该是:

JLabel background = new JLabel(new ImageIcon("C:/User/Desktop/Assignment/bg.jpg"));
con.add(background);
background.setLayout(new FlowLayout());
//con.add(button);
background.add( button );
浦思源
2023-03-14

简单的错误(可能是打字错误?),您正在设置JLabel的布局,您打算设置容器的布局。做con.set布局(新的FlowLayout());而不是background.set布局(...)

此外,我认为您的文件路径不正确。为了测试,只需将文件放在项目中并执行类似“bg.jpg”的路径,如果有效,我们可以验证它。对我来说,这是有效的。我认为这是问题所在的原因是因为您指定了C:/用户,但永远不会给出特定用户的文件夹。正确的路径是C:/用户/Your_name/桌面/分配/bg.jpg

我不确定这一点,因为我不在你们的系统中。然而,对我来说,如果我在eclipse中运行您的代码,这会修复它。

编辑:最后一件事,图像不会真的是当前代码的“背景”图像,因为它会移动它下面的按钮,而不是用FlowLayout移动它上面的按钮。你可能想使用不同的布局。

訾雅畅
2023-03-14

调用setViable(true)后,如果您执行某些操作,您必须手动valide()revalide()您的窗口。

在初始化窗口的所有所需设置和成员资格后,只需调用setViable()就更简单了。

/* setVisible(true); -- wrong place */
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBackground();
setButton();
setVisible(true); // proper place
 类似资料:
  • 问题内容: 我有一个带,还有四面八方面板(华北,华东,…)。面板中大部分是标签和按钮。 现在,我希望框架具有背景图像,一些研究告诉我,我必须更改框架的内容窗格。 但是,当我尝试此操作时,内容将置于背景中并且不可见。另外,如果调整了框架的尺寸,我也不知道如何调整图像的尺寸。 有一个简单的解决方法,还是我需要重新编写大部分代码? 问题答案: 将(或)与背景图片放到,然后将其填满整个区域,其余部分则放到

  • 问题内容: 为什么我的JComponent没有显示在背景JFrame的顶部? 请检查以下代码: 问题答案: 似乎在这里可以正常工作(在此SSCCE变种的代码中)。 工作代码 我可以从中得出的唯一结论是: 找不到您的资源。 您需要学习基本的调试技巧。在这种情况下,具体来说是“检查每个步骤中正在发生的假设是否确实有效”。如下所示的“三级”语句应分解为3个语句,同时使用System.out.printl

  • 最近我一直在尝试java图形,并决定制作一个可以打印拼贴图像的程序。这个程序的构造函数接受一个图像数组和每个图像将显示的宽度。 当我运行程序时,我最初使用以下方法来设置JFrame窗口的大小: 不幸的是,JFrame确实显示了部分图像。JFrame窗口不够低,无法显示所有窗口。为了再次确认我的数学没有出错,我用下面这行代码进行了测试: 同样的问题也发生了。直到我使用了下面的一行,整个图像才显示出来

  • 我刚开始尝试创建java接口,我想创建一个作为大学项目的一部分。 就像我说的,我是一个新手,所以我知道它可能非常简单,或者我没有把它搞砸,但如果有人能帮助它,它将会非常接近。

  • 问题内容: 这是一个非常简单的程序,我已尽力而为,但JPanel并未提供背景图片。我只希望面板上有一个简单的背景图像。 这是我的代码: 提前致谢 问题答案: 更换 与

  • 我正在使用Android v21支持库。 我已经创建了一个自定义背景颜色的按钮。当我使用背景色时,像涟漪,揭示的材质设计效果已经消失了(除了点击时的提升)。