我正在开发一款类似于数字口袋妖怪卡牌的游戏。当我尝试绘制任何图像时,JFrame 仍为空。这可能是一个简单的错误,但我一直无法找到解决方案。在 Stack Overflow 上,我看到了很多像我这样的问题,尽管他们的解决方案不适用于我的代码。这是代码:
JFrame 的类:
import javax.swing.JFrame;
public class Rocks extends JFrame{
public Rocks(){
setVisible(true);
setTitle("Rocks Card Game");
setSize(1200,297);
add(new Display());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Rocks();
}
}
JPanel 类:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Display extends JPanel{
Image granite;
public Display(){
granite = new ImageIcon("C:\\Users\\Raj\\Pictures\\Granite.png").getImage();
setBackground(Color.black);
}
public void paint(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(granite,0,0,null);
}
}
有延长的理由吗JFrame
如果你没有,那就不要。组合优于继承。正如@camickr所说,不需要自定义绘画,你可以使用JLabel
并打电话setIcon
.
public class Rocks{
private JFrame frame;
public Rocks(){
frame = new JFrame();
frame.setTitle("Rocks Card Game");
frame.setSize(1200,297);
//frame.add(new Display());
//as camickr comment
JLabel label = new JLabel(new ImageIcon("C:\\Users\\Raj\\Pictures\\Granite.png"));
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack(); // size components
frame.setVisible(true); // make it visible
}
public static void main(String[] args) {
new Rocks();
}
}
还有一件事你必须看看Swing 程序应该重写paintComponent() 而不是重写paint()
所以(如果你仍然想使用面板)像这样改变你的面板类
public class Display extends JPanel{
Image granite;
public Display(){
granite = new ImageIcon("C:\\Users\\Raj\\Pictures\\Granite.png").getImage();
setBackground(Color.black);
}
@Override // always add override annotation
public void paintComponent(Graphics g){
super.paintComponent(g); // always call super first
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(granite,0,0,this);
}
}
阅读更多 :在 AWT 和 Swing 组件中绘制
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)