我想为我的jFrame设置一个背景,我正在使用下面的代码:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DemoBackgroundSwing extends JPanel {
private Image img;
public DemoBackgroundSwing() {
System.out.println("done");
img = Toolkit.getDefaultToolkit().createImage("red.png");
System.out.println("done");
loadImage(img);
System.out.println("done");
}
private void loadImage(Image img) {
try {
MediaTracker track = new MediaTracker(this);
track.addImage(img, 0);
track.waitForID(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
protected void paintComponent(Graphics g) {
setOpaque(false);
System.out.println("done");
g.drawImage(img, 0, 0, null);
super.paintComponent(g);
}
public static void main(String... argv) {
JFrame frame = new JFrame("Demo Background Image");
DemoBackgroundSwing back = new DemoBackgroundSwing();
System.out.println("done");
frame.getContentPane().add(back);
frame.setSize(400, 287);
frame.setVisible(true);
}
}
当我执行它时,在系统输出中我有5个“完成”。所以这意味着所有任务都已执行。我不明白错误在哪里。请帮帮我!
如果加载图像的宽度为-1,则打印加载图像的宽度。
img = Toolkit.getDefaultToolkit().createImage("red.png");
System.out.println(img.getWidth(null)); // check what it prints
关于使用getResource加载图像的Java教程值得一读
您可以根据图像位置尝试任何一个。
// Read from same package
ImageIO.read(getClass().getResourceAsStream("c.png"));
// Read from images folder parallel to src in your project
ImageIO.read(new File("images/c.jpg"));
// Read from src/images folder
ImageIO.read(getClass().getResource("/images/c.png"))
// Read from src/images folder
ImageIO.read(getClass().getResourceAsStream("/images/c.png"))
阅读更多...
一些要点:
>
调用super.paintComponent(g);
位于被覆盖的PaintComponent()
方法的第一行。
使用< code>ImageIO而不是< code>Toolkit来加载映像。
使用<code>框架。pack()而不是框架。setSize()
,根据组件的首选尺寸安装组件。
重写getPreferredSize()
以设置JBoard
在自定义绘制的情况下的首选大小。
使用SwingUtilities。invokeLater()或EventQueue。invokeLater()以确保EDT已正确初始化。
阅读更多
> < li>
为什么在main方法中使用SwingUtilities.invokeLater?
SwingUtilities.invokeLater
我们是否应该使用 EventQueue.invokeLater 在 Java 桌面应用程序中的任何 GUI 更新?
问题内容: 如何设置JFrame的背景颜色? 问题答案: 检索框架的内容窗格,并使用从继承的方法更改颜色。 例:
我正在用Java制作一个游戏,目前背景设置不起作用,但前景设置可以工作。以下是我的主类代码: 下面是我的Screen类的代码:
问题内容: 有什么方法可以将图像设置为背景JFrame? 问题答案: 没有内置方法,但是有几种方法可以实现。目前我能想到的最直接的方法是: 创建的子类。 重写绘制想要显示的图像的方法。 设置内容窗格的是这个子类。 一些示例代码: 请注意,如果你要使用此代码,则不会处理调整图像大小以适合的大小。
由于某些原因,ImagePanel的大小与JFrame的大小不相同(如这里所示:http://prntscr.com/l8d98i)。当我将ImagePanel的大小设置为JFrame的大小时,我的组件都会调整大小。这是为什么?如图所示:http://prntscr.com/l8d9ka
问题内容: 我学习Java已有几周了,在将背景图像应用于JFrame时,我真的很困惑。我遇到的每个教程都不像我那样创建Frames(我扩展了JFrame),或者如果这样做,说明还不够清楚,我无法理解。 下面的代码来自我自己的项目,因此可以帮助我练习到目前为止所学的内容。请您能否以下面的代码为基础,并向我说明要添加的内容和位置,所以我可能以图像作为框架的背景? 我真正要感谢的一件事是,如果您能解释事
问题内容: 我正在尝试通过以下方式将日期范围划分为各个日期: 而且我不知道为什么不起作用,因为日期仍然相同,所以循环变得无限。 问题答案: plusDays不会改变原始的,您必须分配结果: