【发布时间】:2013-03-27 00:13:45
【问题描述】:
我一直在寻找如何在内容窗格/背景图像上添加对象,但无济于事。本质上,我必须创建一个棋盘游戏,而我的任务是制作 GUI。我需要制作一个中心位置来放置我的棋子,然后才能将棋子移动到这些位置。到目前为止,我只有一个板的背景图像,并且想添加组件以使其具有交互性,但我似乎无法将交互组件覆盖在我的背景图像之上。
这是我的代码:
public class Lotus{
private static JPanel _panel = new JPanel();
private static JFrame _frame = new JFrame("Lotus");
private static Container _pieces = new Container();
public static void main(String[] args){
/**
JLabel A = new JLabel("");
A.setOpaque(true);
A.setBackground(Color.BLACK);
_frame.add(_pieces);
_pieces.add(A);
_frame.setAlwaysOnTop(_pieces);
*/
try{
_frame.setContentPane(new JLabel(new ImageIcon(
ImageIO.read(new File("C:\\Users\\Martin\\Pictures\\pic625580.jpg")))));
}catch(IOException e){
System.out.println("Image is not Found.");
e.printStackTrace();
}
Toolkit tk = Toolkit.getDefaultToolkit();
int xSize = ((int)tk.getScreenSize().getWidth());
int ySize = ((int)tk.getScreenSize().getHeight());
_frame.setSize(xSize,ySize);
Container contentPane = _frame.getContentPane();
contentPane.setLayout(null);
_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//_frame.pack();
_frame.setVisible(true);
/**
JLayeredPane mainLayer = new JLayeredPane();
_frame.add(mainLayer, BorderLayout.CENTER);
JLabel label = new JLabel("LABEL", JLabel.CENTER);
label.setBounds(100,100,200,100);
label.setOpaque(false);
_frame.getContentPane().setComponentZOrder(label, 0);
//label.setVisible(true);
label.setBackground(Color.CYAN);
mainLayer.add(label,1);
mainLayer.moveToFront(_frame);
*/
}
编辑:
好的,所以我尝试了下面的方法,我的 JFrame 现在没有显示,并且由于某种原因查看 Java 控制台它正在终止程序。代码:
public static void main(String[] args){
class Board extends JPanel{
JFrame _frame = new JFrame("Lotus");
Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Martin\\Pictures\\pic625580.jpg");
public void paintComponent(Graphics g) {
JLabel A = new JLabel("");
A.setOpaque(true);
A.setBackground(Color.BLACK);
Board b = new Board();
_frame.setContentPane(b);
_frame.setVisible(true);
_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
super.paintComponent(g);
g.drawImage(image,0,0,A);
g.fillOval( 50,50,5,5 );
}
public Dimension getPreferredSize() {
return new Dimension( 300,300);
}
【问题讨论】:
-
paintComponent() 仅用于绘画。您不会在 paintComponent() 方法中创建组件,也绝对不会在那里创建 JFrame。阅读 Swing 教程,了解如何构建程序的示例。此外,请遵循标准 Java 命名约定。变量不以大写字符开头。
-
欣赏谢谢。
标签: java image swing background