gpt4 book ai didi

java - 在背景图像上添加 JPanel/Containers/Images/JButton/等等?

转载 作者:行者123 更新时间:2023-12-02 07:08:33 24 4
gpt4 key购买 nike

一直在寻找如何在内容 Pane /背景图像上添加对象的方法,但仍无济于事。本质上我必须创建一个棋盘游戏,我的任务是制作 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);


}

最佳答案

您必须将 JPanel 子类化并覆盖 paintComponent 才能完成绘图工作。例如:

public class Board extends JPanel {

Image image = ... // load it here

public void paintComponent(Graphics g) {
super.paintComponent(g); // fatal

g.drawImage(image,0,0,this); // omitted label

g.fillOval( 50,50,5,5 ) // circle 5x5 at pixel 50x50

// etc.
}
}

现在您还应该重写getPreferredSize,以告诉布局管理器板应该有多大:

    public Dimension getPreferredSize() {
return new Dimension(300,300) // your required size...
}

然后将 Board 设置为内容 Pane 。

关于java - 在背景图像上添加 JPanel/Containers/Images/JButton/等等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15819376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com