Image-Objekt darstellen

  • Themenstarter Themenstarter Clemens07
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

Clemens07

Gast
Hallo!

Ich möchte von einem Programm aus ein weiteres Fenster öffnen, in dem ein Funktionsgraph angezeigt wird. Dazu habe ich eine neue Klasse definiert, die ich vom JFrame ableite. Auf dem JFrame befindet sich ein JPanel (darauf soll im Endeffekt der Funktionsgraph dargestellt werden), weiters ein JTextPane und ein JButton.
Das direkte Zeichnen auf dem JPanel funktioniert zwar, jedoch verschwindet die Zeichnung sofort wieder.
Deshalb habe ich ein mit CreateImage(x,y) ein Image-Objekt erstellt, in das ich den Funktionsgraphen zeichne.
Ich bin jedoch nicht in der Lage, dieses Image nun im JPanel anzuzeigen.
Wie mache ich das? Und vor allem so, daß das Bild nachher nicht gleich wieder verschwindet?

Danke + Liebe Grüße

Clemens
 
Code:
meinPanel.add(new JLabel(new ImageIcon(meinImage)));

sollte es tun.
 
Hallo!

...das funktioniert leider auch nicht, das Panel bleibt leer. Ich habe mittlerweilen das Image überprüft und auf die Festplatte speichern lassen, es wird korrekt erstellt.

Was kann ich da machen?

Liebe Grüße

Clemens
 
Hallo!

klar... bitte!

Code:
public class IsoSpectrumWindow extends javax.swing.JFrame {

	private static MassCube mass;
	private static JSpinner MainFrameSpinner;
	
	private static JPanel jPanel1;
	private JPanel jPanel2;
	private JTextPane jTextPane1;
	private JSpinner jSpinner1;
	private JButton jButton1;
	private BufferedImage image = new BufferedImage(374,250, BufferedImage.TYPE_INT_RGB);
	Graphics gr = image.createGraphics();
		
	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		IsoSpectrumWindow inst = new IsoSpectrumWindow(mass, MainFrameSpinner.getValue());
		inst.setVisible(true);
	}
	
	public IsoSpectrumWindow(MassCube mass1, Object msv) {
		super("Grenze des Iso-Extraktors bestimmen");
		initGUI();
		mass = mass1;
		jSpinner1.setValue(msv);
		if (mass!=null) {
			int maxy = 0;
			for (int k=1; k<4096; k++) {
				if (mass.dist[k]>maxy) maxy = mass.dist[k];
			}
			gr.setColor(new Color(0,100,0));
			gr.drawLine(0,0,374,250);
			for (int k=1; k<4096; k++) {
				int x = k*374/4096;
				int y = 250-mass.dist[k]*250/maxy;
				gr.drawLine(x,y,x,y);
			}
		}
		jPanel1.add(new JLabel(new ImageIcon(image)));
		getContentPane().add(jPanel1);
	}
	
	private void initGUI() {
		
	Container con = getContentPane();
                con.setLayout(null);
		
		jPanel1 = new JPanel();
		jPanel1.setLayout(null);
		jPanel1.setLocation(8,8);
		jPanel1.setSize(378,250);
		jPanel1.setBackground(new Color(255,255,255));
		jPanel1.setIgnoreRepaint(true);
		con.add(jPanel1);
		
		jTextPane1 = new JTextPane();
		jTextPane1.setLocation(20,270);
		jTextPane1.setSize(150,25);
		jTextPane1.setBackground(new Color(204,204,204));
		jTextPane1.setText("Iso-Extractor Threshold:");
		jTextPane1.setFocusable(false);
		con.add(jTextPane1);
		
		jSpinner1 = new JSpinner(new SpinnerNumberModel(250,10,4095,100));
		jSpinner1.setLocation(180,270);
		jSpinner1.setSize(60,25);
		con.add(jSpinner1);
		

		jButton1 = new JButton();
		jButton1.setLocation (340,265);
		jButton1.setSize(40,40);
		jButton1.setText("EX");
		con.add(jButton1);
		
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		setBounds(300,300,400,340);
		setSize(400,340);
		setResizable(false);
		setVisible(true);	
	}

	public void paintComponent(Graphics g) {
		jPanel1.add(new JLabel(new ImageIcon(image)));
		jPanel1.repaint();
	}


Danke schon im Voraus für die Hilfe!


Clemens
 
Du addest das jPanel1 2x in das ContentPane deines JFrames (Zeile 42 und 56). Ein mal sollte reichen. Wenn du dann noch die überschriebene paintComponent - Methode komplett in die Tonne wirfst, sollte es eigentlich funktionieren.

Edit: Außerdem scheint mir da am Schluß noch ne } zu fehlen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben