gpt4 book ai didi

java - GlassPane 未显示在 JFrame 上

转载 作者:行者123 更新时间:2023-11-30 05:52:48 24 4
gpt4 key购买 nike

我一直在尝试为我的游戏的游戏内 HUD 实现 GlassPane,但现在我似乎无法获得 JFrame 来设置我的 GlassPane 作为自己的我已经使用了 setGlassPane() 并且我一直在阅读一些例子试图找出我的错误,但没有。所以我写了一个SSCCE这证明了我的问题。我有一个 JFrame,我向其中添加了一个带有标签“TESTIING”的 Jpanel,然后启动我的玻璃 Pane 并在我的框架实例上调用 setGlassPane()。我的 GlassPane 有一个 MouseListener、一个 JPanel 和 2 个 JLabels,以及一个覆盖的 paint() 但是 MouseListener 不会工作 paint() 不会显示并且我的标签不存在(所以基本上我的 GlassPane 没有被设置为我的框架 new GlassPane)-

/*Main.java*/

import java.awt.EventQueue;

public class Main {

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
TestGlassPane testGlassPane=new TestGlassPane();
testGlassPane.setVisible(true);
}
});
}
}

/*TestGlassPane.java*/

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

class TestGlassPane extends JFrame{
private GlassGamePane m_glassPane;
private JPanel drawingPanel;
private JLabel testLabel;

public TestGlassPane() {
createUI();
}
private void createUI() {
setTitle("Test GlassGamePane");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(800, 700);
setResizable(false);
setLocationRelativeTo(null);

createComponents();
//add components to frames content pane
addComponentsToContentPane(getContentPane());


//setting glassPane
m_glassPane = new GlassGamePane();
//set opaque to false, i.e. make transparent
m_glassPane.setOpaque(false);
m_glassPane.setVisible(true);

getRootPane().setGlassPane(m_glassPane);
}

private void addComponentsToContentPane(Container contentPane) {
drawingPanel.add(testLabel);
contentPane.add(drawingPanel, BorderLayout.CENTER);
}

private void createComponents() {
drawingPanel=new JPanel(new BorderLayout());
testLabel=new JLabel("TESTIING");
}
}

/*GlassGamePane.java*/

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GlassGamePane extends JPanel implements MouseListener {

private JPanel statusPanel;
private JLabel healthLabel;

public GlassGamePane() {
createGlassPane();
}

private void createGlassPane() {
setLayout(new BorderLayout());
createComponents();
statusPanel.add(healthLabel);
add(statusPanel, BorderLayout.NORTH);
addMouseListener(this);
}

private void createComponents() {
statusPanel = new JPanel(new GridLayout(2, 6));
healthLabel = new JLabel("Player Health:");
healthLabel.setForeground(Color.RED);
healthLabel.setBackground(Color.BLUE);

}

@Override
public void paintComponent(Graphics g) {
g.setColor(Color.red);
//Draw an oval in the panel
g.drawOval(10, 10, getWidth() - 20, getHeight() - 20);
}

@Override
public void mouseClicked(MouseEvent me) {
Toolkit.getDefaultToolkit().beep();
}

@Override
public void mousePressed(MouseEvent me) {
Toolkit.getDefaultToolkit().beep();
}

@Override
public void mouseReleased(MouseEvent me) {
}

@Override
public void mouseEntered(MouseEvent me) {
}

@Override
public void mouseExited(MouseEvent me) {
}
}

谢谢。

最佳答案

在使 GlassPane 可见之前,您似乎必须先添加自定义 GlassPane 作为框架 GlassPane!此处的代码似乎有效:

    //setting glassPane 
m_glassPane = new GlassGamePane();
setGlassPane(m_glassPane);
//set opaque to false, i.e. make transparent
m_glassPane.setOpaque(false);
m_glassPane.setVisible(true);

关于java - GlassPane 未显示在 JFrame 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11208845/

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