java swing背景图片
Posted
技术标签:
【中文标题】java swing背景图片【英文标题】:java swing background image 【发布时间】:2011-01-14 16:57:45 【问题描述】:我正在使用 JFrame,并且在我的框架上保留了背景图像。现在的问题是图像的大小小于框架的大小,所以我必须在窗口的空白部分再次保留相同的图像。如果用户单击最大化按钮,我可能不得不在运行时将图像放在框架的空白区域。谁能告诉我如何做到这一点?
【问题讨论】:
“我必须在空白部分再次保留相同的图像”对我来说没有意义。你能用你所拥有的和你想要的来创建一个图像吗? 【参考方案1】:在多次使用背景图像而不是调整其大小或仅将其居中显示时,您想要类似于 Windows 桌面的背景图像?
你只需要保存一次图像,然后在paintComponent方法中多次绘制。
【讨论】:
你能给我一个示例代码吗?如果你有。这对我会有很大的帮助。请问?【参考方案2】:听起来好像您在谈论平铺与拉伸,但不清楚您想要哪种行为。
这个程序有两个例子:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main
public static void main(String[] args) throws IOException
final Image image = ImageIO.read(new URL("http://sstatic.net/so/img/logo.png"));
final JFrame frame = new JFrame();
frame.add(new ImagePanel(image));
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
@SuppressWarnings("serial")
class ImagePanel extends JPanel
private Image image;
private boolean tile;
ImagePanel(Image image)
this.image = image;
this.tile = false;
final JCheckBox checkBox = new JCheckBox();
checkBox.setAction(new AbstractAction("Tile")
public void actionPerformed(ActionEvent e)
tile = checkBox.isSelected();
repaint();
);
add(checkBox, BorderLayout.SOUTH);
;
@Override
public void paintComponent(Graphics g)
super.paintComponent(g);
if (tile)
int iw = image.getWidth(this);
int ih = image.getHeight(this);
if (iw > 0 && ih > 0)
for (int x = 0; x < getWidth(); x += iw)
for (int y = 0; y < getHeight(); y += ih)
g.drawImage(image, x, y, iw, ih, this);
else
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
【讨论】:
您好,您对如何平铺图像而不是拉伸图像以保持图像质量有什么建议吗?【参考方案3】:平铺图像的另一种方法是使用TexturePaint
:
public class TexturePanel extends JPanel
private TexturePaint paint;
public TexturePanel(BufferedImage bi)
super();
this.paint = new TexturePaint(bi, new Rectangle(0, 0, bi.getWidth(), bi.getHeight()));
@Override
protected void paintComponent(Graphics g)
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(paint);
g2.fill(new Rectangle(0, 0, getWidth(), getHeight()));
【讨论】:
以上是关于java swing背景图片的主要内容,如果未能解决你的问题,请参考以下文章
java中的swing设计界面时怎么加上背景图片。而不覆盖啥label等控件?