Graphics are not displayed in jlayeredpane (Java Swing)
•
Java
I'm trying to build an image based on user input step by step What I'm trying to do is create a bunch of graphics and add them as layers, but I have some problems because they won't be displayed This is the code I'm using:
public class ClassA { protected final static int dimesionsY = 1000; private static int dimesionsX; private static JFrame window; private static JLayeredPane layeredPane; public void init() { window = new JFrame("Foo"); dimesionsX = // some user input window.setPreferredSize(new Dimension(dimesionsX,dimesionsY)); window.setLayout(new BorderLayout()); layeredPane = new JLayeredPane(); layeredPane.setBounds(0,dimesionsX,dimesionsY); window.add(layeredPane,BorderLayout.CENTER); ClassB myGraphic = new ClassB(); myGraphic.drawGraphic(); layeredPane.add(myGrpahic,new Integer(0),0); window.pack(); window.setVisible(true); } } public class ClassB extends JPanel { public void drawGraphic() { repaint(); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.BLACK); g.fillRect(10,10,100,100); } }
But my figure doesn't seem to appear. I don't understand why I also tried to add it to JPanel and JPanel to jlayeredpane, but it didn't work
Could someone please help me?
Solution
Adding a component to a jlayeredpane is like adding it to an empty layout using a container: you must fully specify the size and location of the component
For example,
import java.awt.*; import javax.swing.*; public class ClassA { protected final static int dimesionsY = 800; protected final static int dimesionsX = 1000; //!! private static JFrame window; private static JLayeredPane layeredPane; public void init() { window = new JFrame("Foo"); // !! dimesionsX = // some user input //!! window.setPreferredSize(new Dimension(dimesionsX,dimesionsY)); window.setLayout(new BorderLayout()); layeredPane = new JLayeredPane(); //!! layeredPane.setBounds(0,dimesionsY); layeredPane.setPreferredSize(new Dimension(dimesionsX,dimesionsY)); window.add(layeredPane,BorderLayout.CENTER); ClassB myGraphic = new ClassB(); myGraphic.drawGraphic(); myGraphic.setSize(layeredPane.getPreferredSize()); myGraphic.setLocation(0,0); //!! layeredPane.add(myGraphic,0); layeredPane.add(myGraphic,JLayeredPane.DEFAULT_LAYER); window.pack(); window.setVisible(true); } public static void main(String[] args) { new ClassA().init(); } } class ClassB extends JPanel { public void drawGraphic() { repaint(); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.BLACK); g.fillRect(10,100); } }
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码