java图像不会加载.contentpane?

时间:2014-02-09 03:16:31

标签: java swing

这是我正在使用LEARN java的一个例子,我试图将其中一个框作为.png文件,我在我的计算机上,但你可能已经猜到它不起作用。我以为它与我的班级string text有关。我的问题是:

1)我是否必须为图像创建一个新类?但我认为所有参数仍然以string传递? 2)我应该尝试使用其他方法,例如“重画画布”吗? 3)我应该使用ImageIcon(s)吗?在ImangePanel

这是我的源代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Toolkit;
import javax.swing.ImageIcon;  
import javax.swing.JFrame;  
import javax.swing.JPanel;  
import java.awt.Dimension;  
import java.awt.Graphics;  
import java.awt.Image; 


public class DragButton extends JButton{

    private volatile int draggedAtX, draggedAtY;

    public DragButton(String text){
        super(text);
        setDoubleBuffered(false);
        setMargin(new Insets(0, 0, 0, 0));  
        setSize(100, 100);
        setPreferredSize(new Dimension(25, 25));

        addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                draggedAtX = e.getX();
                draggedAtY = e.getY();
            }
        });

        addMouseMotionListener(new MouseMotionAdapter(){
            public void mouseDragged(MouseEvent e){
                setLocation(e.getX() - draggedAtX + getLocation().x,
                        e.getY() - draggedAtY + getLocation().y);
            }
        });
    }

    public static void main(String[] args){

        JFrame frame = new JFrame("DragButton");
        frame.setLayout(null);
        frame.getContentPane().add(new DragButton("1")).setLocation(300, 500);
        frame.getContentPane().add(new DragButton("2")).setLocation(100, 100);
        frame.getContentPane().add(new DragButton("3")).setLocation(75, 75);
        frame.getContentPane().add(new DragButton("yo")).setLocation(310, 310);
        ImagePanel panel = new ImagePanel(
           new ImageIcon("C:\\Users\\Donnie\\Desktop\\gtav.jpg").getImage());  
        frame.getContentPane().add(panel);  


        Toolkit tk = Toolkit.getDefaultToolkit();  
        int xSize = ((int) tk.getScreenSize().getWidth());  
        int ySize = ((int) tk.getScreenSize().getHeight());  
        frame.setSize(xSize, ySize);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.pack();
        frame.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:1)

一个问题是您正在为JFrame使用null布局,在执行此操作时,您负责设置添加的每个组件的大小和位置,包括ImagePanel实例。因此,如果您必须使用null布局(我通常会尽量避免这样做),至少应设置ImagePanel实例的边界。