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
二维码
