auf Button druck zeichnen

Status
Nicht offen für weitere Antworten.

florian1x

Aktives Mitglied
also ich will dass der mir wenn ich den Button diagramm1 drück das ganze neuzeichnet. naja ersma der code

als erstes ma den Code des Tabs in dem dann alles steht

Code:
import javax.swing.*;
import javax.swing.border.TitledBorder;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.ActionListener;

public class DiagrammeTab extends JPanel implements ItemListener, ActionListener
{
	JPanel tab = new JPanel();  
 	
    JButton buttomDiagramm1 = new JButton(new ImageIcon("img/Diagramm1.jpg"));
	JButton buttomDiagramm2 = new JButton(new ImageIcon("img/Diagramm2.jpg"));
	JButton buttomdiagramm3 = new JButton(new ImageIcon("img/Diagramm3.jpg"));
	
	JPanel frame_l = new JPanel();
 	JPanel frame_r = new JPanel();
 	JPanel border_l = new JPanel(new GridLayout(1,1,0,0));
 	JPanel border_r = new JPanel(new GridLayout(3,1,0,0));
 	
 	DiagrammZeichnung dz = new DiagrammZeichnung();
 	BodeDiagramm bd = new BodeDiagramm();
 	
 	
 	public DiagrammeTab()
 	{
 		tab.setBorder(new TitledBorder(""));
 		tab.setBackground(Color.white);
 		
 		buttomDiagramm1.addActionListener(this);
 		buttomDiagramm2.addActionListener(this);
 		buttomdiagramm3.addItemListener(this);
 		
 		border_r.add(buttomDiagramm1);
 		border_r.add(buttomDiagramm2);
 		border_r.add(buttomdiagramm3);
 		border_l.add(dz);
 		
 		frame_l.setBackground(Color.white);
 		frame_r.setBackground(Color.white);
 		
 		border_l.setPreferredSize(new Dimension(480,380));
 		border_r.setPreferredSize(new Dimension(200,380));
 		border_l.setBorder(new TitledBorder("gewählt"));
 		border_r.setBorder(new TitledBorder("Auswahl"));
 		border_l.setBackground(Color.white);
 		border_r.setBackground(Color.white);
 		
 		tab.add(frame_l);
 		tab.add(frame_r);
 		frame_l.add(border_l, CENTER_ALIGNMENT);
 		frame_r.add(border_r, CENTER_ALIGNMENT);
 		
 		this.add(tab, BorderLayout.CENTER);
 	}
 	
 	public void itemStateChanged(ItemEvent e)
	{
		if(e.getSource() == buttomDiagramm1)
		{
			
			border_l.removeAll();
			border_l.add(bd);
		}
		if(e.getSource() == buttomDiagramm2)
		{
			
		}
		if(e.getSource() == buttomdiagramm3)
		{
			
		}
	}
 	public void actionPerformed(ActionEvent e)
	{
 		if(e.getSource() == buttomDiagramm1)
		{
			border_l.removeAll();
			border_l.add(bd);
		}
	}
 }

so nun die beiden JPanels die ich adde und in denen dann Gezeichnet wird

Code:
import javax.swing.*;
import java.awt.*;

public class DiagrammZeichnung extends JPanel
{
	JPanel Zeichnung = new JPanel();

	public DiagrammZeichnung()
	{		
		this.add(Zeichnung);
	}
	
	public void paint( Graphics g )
    {
		g.drawString( "Bitte ein Diagramm auswählen",160,170 );
    }

}

Code:
import javax.swing.*;

import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;


public class BodeDiagramm extends JPanel implements ItemListener
{
	JPanel Zeichnung = new JPanel();
	
	public BodeDiagramm()
	{		
		this.add(Zeichnung, BorderLayout.CENTER);
	}
	
	public void paint( Graphics g )
    {
		//RAHMEN
		g.drawRect(20,15,420,315);
		//WAAGERECHTE STRICHE
		g.drawLine(125, 15, 125, 330);
		g.drawLine(230, 15, 230, 330);
		g.drawLine(335, 15, 335, 330);
		//WAAGERECHTE ZWISCHENSTRICHE
		//g.drawLine(pow(101,10),15,pow(10,10),435);
		//g.drawRect(pow(10,10),15,1,420);
		//SENKRECHTE STRICHE
		//g.drawRect(20,120,420,105);
		g.drawLine(20,((315/4)+20),440,((315/4)+20));
		g.drawLine(20,((315/2)+20),440,((315/2)+20));
		g.drawLine(20,(((315/4)*3)+20),440,(((315/4)*3)+20));
    }
	


	public void itemStateChanged(ItemEvent e) 
	{
	
	}
}

also DiagrammZeichnung wird über den Konstruktor geladen. Klappt uach
aber nun soll der wenn ich den button drück das Bode diagramm reinklatschen
geht net
könnt ihr mir helfen`?
 
Ich habe mir den Code jetzt nicht vollständig auseinandergenommen, aaaber...
Swing-Komponenten werden mit der paintComponent()-Methode gezeichnet.

Die für das BodeDiagramm sollte demnach so aussehen:
Code:
   public void paintComponent( Graphics g ) 
    { 
      super.paintComponent(g);

      //RAHMEN 
      g.drawRect(20,15,420,315); 
      //WAAGERECHTE STRICHE 
      g.drawLine(125, 15, 125, 330); 
      g.drawLine(230, 15, 230, 330); 
      g.drawLine(335, 15, 335, 330); 
      //WAAGERECHTE ZWISCHENSTRICHE 
      //g.drawLine(pow(101,10),15,pow(10,10),435); 
      //g.drawRect(pow(10,10),15,1,420); 
      //SENKRECHTE STRICHE 
      //g.drawRect(20,120,420,105); 
      g.drawLine(20,((315/4)+20),440,((315/4)+20)); 
      g.drawLine(20,((315/2)+20),440,((315/2)+20)); 
      g.drawLine(20,(((315/4)*3)+20),440,(((315/4)*3)+20)); 
    }
Das Gleiche gilt für DiagrammZeichnung.

Und wenn du Komponenten zur Laufzeit in ihrer Anzahl und Lage/Position änderst (hinzufügen, umsetzen etc.) muss danach ein Korrekturzeichnen angefordert werden.
Du schreibst also nach dem Hinzufügen zur Laufzeit noch ein validate(); in die nächste Zeile.
Code:
   public void actionPerformed(ActionEvent e) 
   { 
      if(e.getSource() == buttomDiagramm1) 
      { 
         border_l.removeAll(); 
         border_l.add(bd); 
         validate();
      } 
   }
 
danke ich bin dir sehr dankbar
das mti dem paintcomponent hatte ich selbst herrausgefunden und hatte uach selbst hinbekommen, dass der wechselt aber erst nach einer bestimmten clickfolge ^^
mit deinem validate gehts sofort danke ^^
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben