我最近编写了一个包含背景图像的系统主页。设置背景后,我创建的按钮无法正确显示。它只是在我使用鼠标并指向按钮的位置后出现的。有人能教我如何解决这个问题吗?谢谢你的帮助。代码如下:
公共类主页扩展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);
}
首先,如前所述,在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 );
简单的错误(可能是打字错误?),您正在设置JLabel
的布局,您打算设置容器
的布局。做con.set布局(新的FlowLayout());
而不是background.set布局(...)
此外,我认为您的文件路径不正确。为了测试,只需将文件放在项目中并执行类似“bg.jpg”的路径,如果有效,我们可以验证它。对我来说,这是有效的。我认为这是问题所在的原因是因为您指定了C:/用户
,但永远不会给出特定用户的文件夹。正确的路径是C:/用户/Your_name/桌面/分配/bg.jpg
我不确定这一点,因为我不在你们的系统中。然而,对我来说,如果我在eclipse中运行您的代码,这会修复它。
编辑:最后一件事,图像不会真的是当前代码的“背景”图像,因为它会移动它下面的按钮,而不是用FlowLayout移动它上面的按钮。你可能想使用不同的布局。
调用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支持库。 我已经创建了一个自定义背景颜色的按钮。当我使用背景色时,像涟漪,揭示的材质设计效果已经消失了(除了点击时的提升)。