这是我正在使用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);
}
}
答案 0 :(得分:1)
一个问题是您正在为JFrame使用null
布局,在执行此操作时,您负责设置添加的每个组件的大小和位置,包括ImagePanel实例。因此,如果您必须使用null
布局(我通常会尽量避免这样做),至少应设置ImagePanel实例的边界。