Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将图像设置为JPanel的背景_Java_Swing - Fatal编程技术网

Java 如何将图像设置为JPanel的背景

Java 如何将图像设置为JPanel的背景,java,swing,Java,Swing,我正在开发一个java程序,这是一个棋盘游戏。我需要帮助将图像分配到JPanel的背景。我现在拥有的只是一个可以点击和拖动的移动块(板块) 导入java.awt.Color; 导入java.awt.Dimension; 导入java.awt.Graphics; 导入java.awt.Graphics2D; 导入java.awt.Rectangle; 导入java.awt.event.MouseAdapter; 导入java.awt.event.MouseEvent; 导入javax.swing.

我正在开发一个java程序,这是一个棋盘游戏。我需要帮助将图像分配到JPanel的背景。我现在拥有的只是一个可以点击和拖动的移动块(板块)

导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Rectangle;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公共类ShapeMover{
公共ShapeMover(){
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle(“形状移动器”);
初始组件(框架);
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串s[]{
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
新的ShapeMover();
}
});
}
私有组件(JFrame){
frame.getContentPane().add(新的DragPanel());
}
}
类DragPanel扩展了JPanel{
矩形rect=新矩形(0,0,20,20);
intprex,猎物;
布尔值isFirstTime=true;
矩形区域;
布尔值pressOut=false;
私有维度dim=新维度(800666);
公共绘图板(){
addMouseMotionListener(新的MyMouseAdapter());
addMouseListener(新的MyMouseAdapter());
}
@凌驾
公共维度getPreferredSize(){
返回暗淡;
}
@凌驾
公共组件(图形g){
超级组件(g);
Graphics2D g2d=(Graphics2D)g;
如果(是第一次){
面积=新矩形(尺寸);
直肠定位(50,50);
isFirstTime=false;
}
g2d.setColor(Color.black);
g2d.填充(矩形);
}
布尔checkRect(){
如果(面积==null){
返回false;
}
if(area.contains(rect.x,rect.y,rect.getWidth(),rect.getHeight())){
返回true;
}
int new_x=rect.x;
int new_y=rect.y;
如果((rect.x+rect.getWidth())>area.getWidth()){
new_x=(int)area.getWidth()-(int)(rect.getWidth()-1);
}
if(矩形x<0){
新的_x=-1;
}
如果((rect.y+rect.getHeight())>area.getHeight()){
new_y=(int)area.getHeight()-(int)(rect.getHeight()-1);
}
if(矩形y<0){
新的y=-1;
}
矩形设置位置(新x,新y);
返回false;
}
私有类MyMouseAdapter扩展了MouseAdapter{
@凌驾
公共无效鼠标按下(MouseEvent e){
preX=rect.x-e.getX();
preY=rect.y-e.getY();
if(rect.contains(e.getX(),e.getY()){
更新位置(e);
}否则{
pressOut=true;
}
}
@凌驾
公共无效鼠标标记(鼠标事件e){
如果(!按出){
更新位置(e);
}否则{
}
}
@凌驾
公共无效MouseEvent(MouseEvent e){
if(rect.contains(e.getX(),e.getY()){
更新位置(e);
}否则{
按出=假;
}
}
public void updateLocation(MouseEvent e){
直肠定位(preX+e.getX(),preY+e.getY());
checkRect();
重新油漆();
}
}
}

创建一个新的JLabel,将其添加到要显示背景图像的帧中。 大概是这样的:

    JLabel lblNewLabel = new JLabel("");
    lblNewLabel.setIcon(new ImageIcon("C:\\Users\\Faisal\\Desktop\\New folder\\picture-1.thumbnail.png"));
    lblNewLabel.setBounds(0, 0, 515, 367);
    frame1.add(lblNewLabel);

这是我的项目中的一段代码。

在JPanel上设置背景的正确方法是创建一个JPanel子类并覆盖paintComponent

public ImagePanel extends JPanel {
  Image im;
  public ImagePanel(Image im) {
    this.im = im;
  }

  void paintComponent(Graphics g) {
    g.drawImage(im,0,0, getWidth(), getHeight(), this);
    super.paintComponent(g);
  }
}

. 而你
setBounds
call是supious@MadProgrammer,感谢您的提醒,我是Java新手,正在关注JLabel。来吧,您现在应该更清楚,
paintComponent
不应该是
public
,您应该调用
super.paintComponent
,您应该将
作为
图像观察者
(特别是对于
图像
)传递,这将根据图像的比率“缩放”图像(IMHO严重),这将使图像看起来。。。不愉快
public ImagePanel extends JPanel {
  Image im;
  public ImagePanel(Image im) {
    this.im = im;
  }

  void paintComponent(Graphics g) {
    g.drawImage(im,0,0, getWidth(), getHeight(), this);
    super.paintComponent(g);
  }
}