[英]JFrame background image
我正在創建一個 GUI,雖然是一個簡單的 GUI,但我想要一個背景圖像 (2048 X 2048) 填滿整個窗口,並在左上角有一個正方形,偶爾可以加載 64 X 64 圖像。 在此先感謝任何提供幫助的人 :) 編輯:我已經知道如何將 JFrame 設置為固定大小,這是我需要幫助的圖像加載。
這是在 JFrame 中添加背景圖像的簡單示例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class BackgroundImageJFrame extends JFrame
{
JButton b1;
JLabel l1;
public BackgroundImageJFrame()
{
setTitle("Background Color for JFrame");
setSize(400,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
/*
One way
-----------------
setLayout(new BorderLayout());
JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png"));
add(background);
background.setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
background.add(l1);
background.add(b1);
*/
// Another way
setLayout(new BorderLayout());
setContentPane(new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png")));
setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
add(l1);
add(b1);
// Just for refresh :) Not optional!
setSize(399,399);
setSize(400,400);
}
public static void main(String args[])
{
new BackgroundImageJFrame();
}
}
加載圖像的最佳方式是通過ImageIO
API
BufferedImage img = ImageIO.read(new File("/path/to/some/image"));
有多種方法可以將圖像渲染到屏幕上。
您可以使用JLabel
。 如果您不想以任何方式修改圖像,這是最簡單的方法......
JLabel background = new JLabel(new ImageIcon(img));
然后只需將其添加到您認為合適的窗口即可。 如果您需要向其中添加組件,那么您可以簡單地將標簽的布局管理器設置為您需要的任何內容並添加您的組件。
但是,如果您需要更復雜的東西,需要以某種方式更改圖像或想要應用其他效果,則可能需要使用自定義繪畫。
第一個隱瞞者:永遠不要直接繪制到頂級容器(如JFrame
)。 頂級容器不是雙緩沖的,因此您可能會在重繪之間出現一些閃爍,其他對象位於窗口上,因此更改它的繪制過程很麻煩並且可能導致其他問題,並且框架具有在可視區域內呈現的邊框窗戶的...
相反,創建一個自定義組件,從JPanel
東西擴展。 覆蓋它的paintComponent
方法並將您的輸出呈現給它,例如......
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, this);
}
我使用了與@bott 非常相似的方法,但我對其進行了一些修改,以便無需調整圖像大小:
BufferedImage img = null;
try {
img = ImageIO.read(new File("image.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
Image dimg = img.getScaledInstance(800, 508, Image.SCALE_SMOOTH);
ImageIcon imageIcon = new ImageIcon(dimg);
setContentPane(new JLabel(imageIcon));
每次都有效。 您還可以獲取 jFrame 的寬度和高度,並分別使用它來代替 800 和 508。
你可以做:
setContentPane(new JLabel(new ImageIcon("resources/taverna.jpg")));
在 Jframe 類構造函數的第一行,這對我來說很好用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.