我一直在從 YouTube 教程中學習 Java,當涉及到在框架中攜帶組件時,事情對我來說有點復雜。這節課對我來說有幾件事,比如超級關鍵字、圖形類和繪制方法。我設定了一個框架并將這個 JPanel 添加到該框架中。我按照我的理解寫了這個練習,但它沒有繪制 ImageIcon 而是打開一個完全空的框架。感謝任何可以提前提供幫助的人。
public class DragPanel extends JPanel{
ImageIcon image=new ImageIcon("walle.png");
Point imageCorner;
Point prevPt;
DragPanel(){
imageCorner=new Point(0,0);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
image.paintIcon(this, g, (int)imageCorner.getX(), (int)imageCorner.getY());
}
}
uj5u.com熱心網友回復:
ImageIcon("walle.png")正在查找相對于您執行java命令的位置的檔案。
您可以通過添加代碼來檢查“作業”目錄是什么System.getProperty("user.dir")。您還可以使用以下方法檢查檔案是否存在于當前背景關系中System.getProperty(new File("walle.png").exists())
如果是這種情況,它將導致 FileNotFoundException 而不是列印 null
實際上,ImageIcon它不會拋出例外,它只是默默地失敗,這就是為什么我傾向于不建議使用它的原因。
相反,您應該使用ImageIO,部分支持更多格式(并且可以擴展),如果影像無法加載并且在影像完全加載之前不會回傳,它也會引發例外。
有關詳細資訊,請參閱
package stackoverflow;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
public class TestPane extends JPanel {
private BufferedImage image;
public TestPane() throws IOException {
image = ImageIO.read(getClass().getResource("/images/happy.png"));
}
@Override
public Dimension getPreferredSize() {
return image == null ? new Dimension(200, 200) : new Dimension(image.getWidth(), image.getHeight());
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (image == null) {
return;
}
Graphics2D g2d = (Graphics2D) g.create();
int x = (getWidth() - image.getWidth()) / 2;
int y = (getHeight() - image.getHeight()) / 2;
g2d.drawImage(image, x, y, this);
g2d.dispose();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441219.html
