GlassPane visas inte på JFrame
Jag har försökt implementera en GlassPane
för mina spels HUD i spelet, men just nu verkar jag inte få JFrame
för att ställa in min GlassPane
som sin egen har jag använt setGlassPane()
och jag har läst upp några exempel för att hitta mitt misstag, men ingenting. Så jag skrev en SSCCE som visar mitt problem. Jag har en JFrame som jag lägger till en Jpanel med etiketten "TESTIING" och sedan initierar jag min galss-panel och anropar setGlassPane() på min frames-instans. My GlassPane har en MouseListener
, en JPanel
och 2 JLabels
, och en åsidosatt paint()
dock MouseListener
fungerar inte med paint()
visas inte och mina etiketter finns inte där (så i princip min GlassPane
ställs inte in som mina ramar nya 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) { } }
Tack.
Svar
Det verkar som att du först måste lägga till den anpassade GlassPane
som dina ramar GlassPane
innan du gör GlassPane
synlig! Den här koden här verkade fungera:
//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);