Image auf JPanel abbilden

  • Themenstarter Themenstarter ByeBye 190166
  • Beginndatum Beginndatum
B

ByeBye 190166

Hallo,

ich möchte verschiedene Farben zur Auswahl in einem JDialog anbieten.
Dazu sollen die Farben als Farbfelder angezeigt werden.
Hierzu habe ich ich mich für ein JPanel entschieden (Als Icon von JLabel geht es natürlich auch). Die Farbfelder sollen über MemoryImageSource erzeugt werden. Siehe unten.
(!)Erzeugt momentan noch unabhängig von den Parameter einen Farbverlauf

Code:
Image createNewImage (EnumColors color, int Size)
    {  
       Image theImage;
       int pix[] = new int[Size*Size];

       int index = 0;       
       for (int y = 0; y < Size; y++)
       {
           int red = (y * 255) / (Size - 1);
           for (int x = 0; x < Size; x++)
           {
               int blue = (x * 255) / (Size - 1);
               pix[index++] = (255 << 24) | (red << 16) | blue;
           }
       }
       theImage = createImage (new MemoryImageSource (Size, Size, pix, 0, Size));
       return (theImage);
       }
Nun habe ich ein Image welches ich anzeigen möchte.
Dazu soll ein JPanel erzeugt werden indem ich das Image anzeige.
Geht es auch einfacher ? Grundsätzlich möchte ich kein Image laden, sondern eines erzeugen und anzeigen. Falls kein Farbverlauf gewünscht ist geht es natürlich auch über fillRect().
Code:
private class WhitePanel extends JPanel 
	{
		private WhitePanel() 
	    {
	    	Image theImage = createNewImage (EnumColors.BLACK, 20);
	    	
			setLayout(new TableLayout(new double[][] {
				{TableLayout.FILL},
				{TableLayout.FILL}}));
				
		    Graphics g = this.getGraphics();
			:confused:Und hier gibt es eine NullPointerException
                    g.drawImage(theImage, 0, 0,20,20, this);         
		
		}
	}

Tut mir leid, ich seh es nicht, ich versteh es nicht.
 
Java:
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class JPaneDemo extends JFrame {

	private static final int SIZE = 500;
	JPaneDemo() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(SIZE,SIZE);
		getContentPane().add(new WhitePanel());
		
		
	}
	
	
	public static void main(String[] args) {
		new JPaneDemo().setVisible(true);

	}
	
	public Image createNewImage ()
    {
		BufferedImage retval = new BufferedImage(SIZE,SIZE,BufferedImage.TYPE_INT_RGB);
		int index = 0;       
	       for (int y = 0; y < SIZE; y++)
	       {
	           int red = (y * 255) / (SIZE - 1);
	           for (int x = 0; x < SIZE; x++)
	           {
	               int blue = (x * 255) / (SIZE - 1);
	               retval.setRGB(x, y, (255 << 24) | (red << 16) | blue)  ;
	           }
	       }

		return retval;
    }
	
	class WhitePanel extends JPanel 
	{
		private Image theImage;
		public WhitePanel() 
	    {
			
			theImage= createNewImage ();
	    				
			// Dieser Teil ist nicht noetig. Er schreibt nur den Text ins Bild....
			Graphics g = theImage.getGraphics();
			g.drawString("So gehts!", 50, 50);
			
		   		
		}
		
		public void paint(Graphics g) {
			g.drawImage(theImage, 0,0,SIZE,SIZE, this);
		}
	}

}
 
Zuletzt bearbeitet:
Vielen Dank,

habe das Problem schon gelöst.
Es fehlte am Verständnis meinerseits.
Dafür habe ich wieder ein neues Problem.
Dafür gibt es einen Thread.
 
Zurück