Announcement

Collapse
No announcement yet.

JPanel zu Image umwandeln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JPanel zu Image umwandeln

    Hallo,
    ich bin neu hier im Forum und habe folgendes Problem:
    Ich habe eine Klasse um ein JPanel erweitert. Dieses JPanel enthält diverse JPanels und JLabels, welche mit verschiedenen LayoutManagern angeordnet werden.
    Dieses JPanel möchte ich gerne ausdrucken, OHNE das es vorher auf dem Bildschirm ausgegeben wird. Dazu muß ich es in ein Image umwandeln. Und das will bei mir nicht richtig funktionieren.
    Ich habe ein kleines Programm zum Ausprobieren geschrieben.
    Die Klasse "Bildaufbau" stellt das JPanel dar, welches in ein Image umgewandelt werden soll. Die Klasse "Arbeit" enthält eine Methode, welche die Umwandlung bewerkstelligen soll. Darüberhinaus wird dieses erzeugte Image als ImageIcon in einem JLabel auf dem Bildschirm ausgegeben, um zu kontrollieren, ob die Umwandlung richtig funktioniert hat.

    Ich habe es bisher nur geschafft, daß die Elemente links oben in die Ecke geknallt werden. Die Layoutmanager werden gar nicht berücksichtigt.
    Ich habe schon vieles Ausprobiert und im Netz gesucht, aber nichts gefunden, das funktioniert.
    Vielleicht weiß einer von euch, was ich Falsch mache.

    Hier das Versuchsprogramm (Es besteht aus drei Klassen):

    1. Klasse:
    Code:
    public class Bildchen
    {
    	public static void main(String[] args)
    	{
    		Arbeit arb = new Arbeit();
    	}
    }
    2. Klasse:
    Code:
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.FlowLayout;
    import java.awt.Rectangle;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class Bildaufbau extends JPanel
    {
    	public Bildaufbau()
    	{
    				
    		this.setBounds(0, 0, 200, 300);
    		this.setLayout(new BorderLayout());
    		this.setBackground(Color.CYAN);
    		
    		JPanel yx = new JPanel();
    		yx.setLayout(new FlowLayout());
    		yx.setBounds(new Rectangle(50,50));
    		yx.setBackground(Color.BLUE);
    		
    		JPanel we = new JPanel();
    		we.setLayout(new FlowLayout());
    		we.setBounds(new Rectangle(150,70));
    		we.setBackground(Color.GREEN);
    		
    		JLabel as = new JLabel("TestTestTest");
    		as.setBounds(new Rectangle(100, 50));
    		
    		we.add(as);
    		
    		this.add(yx, BorderLayout.NORTH);
    		this.add(we, BorderLayout.SOUTH);		
    	}
    }
    3. Klasse:
    Code:
    import java.awt.BorderLayout;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.ScrollPaneConstants;
    
    
    public class Arbeit
    {
    	public Arbeit()
    	{
    		Fenstermachen();
    	}
    	
    	public void Fenstermachen()
    	{
    		JFrame Versuch = new JFrame();
    		Versuch.setBounds(0, 0, 700, 800);
    		Versuch.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		Versuch.setLayout(new BorderLayout());
    		JLabel x = new JLabel();
    		ImageIcon ic = new ImageIcon();
    				
    		Image i = getSnapShot(new Bildaufbau());
    		
    		ic.setImage(i);
    		x.setIcon(ic);
    		
    		JScrollPane sp = new JScrollPane(x);
    		sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    		sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
    		Versuch.add(sp, BorderLayout.CENTER);
    		Versuch.setVisible(true);
    	}
    	
    	public BufferedImage getSnapShot(JPanel view)
    	{
    		 int w=view.getWidth();
    		 int h=view.getHeight();
    		 
    		 BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
    		 
    		 synchronized(view.getTreeLock())
    		 {
    			 //view.setVisible(true);
    			 //view.repaint();
    			 view.paint(image.createGraphics());
    			 //view.paintAll(image.createGraphics());
    			 //view.paintComponents(image.createGraphics());
    			 
    		 }
    		 
    		 return image;
    	}
    }
Working...
X