Auf Knopfdruck malen ??????

Status
Nicht offen für weitere Antworten.

VerstehNix

Mitglied
Ich verzweifle !!! Ich kann zwar auf einem JPanel malen, aber nicht erst dann, wenn ein Knopf gedrückt wurde. Ich check das einfach nicht. Ich hab mir auch schon mindestens 1.000.000 Foren durchgelesen, aber es geht trotzdem nicht. Erschwerend kommt dazu, dass ich ein absoluter Anfänger bin. Ich pack hier erstmal den Code rein:

Hier das Hauptfenster :
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


class mainframe{
	
   public static void main(String [] args){
   
   JFrame f = new JFrame("Strichmaltest");
   Container c = f.getContentPane();
     
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout());
          
          //Center Komponente
          paintPanel grafik = new paintPanel();
        mainPanel.add(grafik, BorderLayout.CENTER);
          
          //South Komponente
          JButton paint = new JButton("paint");
          paint.addActionListener(new paint());
        mainPanel.add(paint, BorderLayout.SOUTH);
    
    c.add(mainPanel);
    f.setSize(400,400);
    f.setVisible(true);     
   }
}

und dass ist das Panel, in dem gezeichnet werden soll:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class paintPanel extends JPanel{
	
	
	
     public void paintComponent(Graphics g){
     int height = getSize().height;
     int width = getSize().width;
     
     //Ränder des Koordinatensystems
     g.setColor(Color.blue);
     g.drawLine(10,10,10,height-10);
     g.drawLine(10,height-10,width-10,height-10);	
       }
	
}

und JETZT kommt der ActionListener für den Paint Button:

Code:
import java.awt.*;
import java.awt.event.*;



class paint implements ActionListener{
	
   public void actionPerformed(ActionEvent e){
   	
   	}	
}

So, jetzt kann mir bitte jemand sagen, was GENAU in die actionPerformed-Methode rein soll, damit einfach eine Linie auf dem paintPanel gezeichnet wird ??!!
Danke schonmal... (hoffe dass mir jemand helfen kann)
 
R

Roar

Gast
sobald du die klasse paintPanbel instantiierst (und sichtbar machst irgendwo) wird gezeichnet, da der code ohne irgendeine bedingung in der paintComponent methode stht. ist ja logisch dass dann gemalt wird. folgendes wär gut:
eine boolean in die klasse reinmachen und auf false setzen. dann um den zeichen code die if bedingung setzen, die die variable auf true prüft. dann eine methode zur kalsse hinzufügen paintLine() die die variable auf true setzt, dann this.repaint() aufrufen in der methode und feddisch. in der actionPerformed dann myPaintPanel.paintLine() und so solltes gehn
 

VerstehNix

Mitglied
Es geht einfach nicht, wo genau muss das verdammte repaint() hin ?? Wo is der verfluchte Fehler...

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

class paintPanel extends JPanel{
	 
     boolean malen = false;               //erstmal nicht die Linie bzw den String malen
     public int height; 
     public int width; 	
	
     public void paintComponent(Graphics g){
        height = getSize().height;
        width = getSize().width;
     
     //Ränder des Koordinatensystems
     g.setColor(Color.blue);
     g.drawLine(10,10,10,height-10);
     g.drawLine(10,height-10,width-10,height-10);	
       
       if(malen == true){
       g.setColor(Color.red);
       g.drawString("Geht es ??",width/2,height/2);
       this.repaint();
       }
     }
     
	 public void paintLine(){
	   malen = true;
	   System.out.println(malen);
	 }
}

und die Klasse mit dem ActionListener hab ich jetzt von paintPanel abgeleitet, weil er sonst nicht paintLine() kennt:

Code:
import java.awt.*;
import java.awt.event.*;



class paint extends paintPanel implements ActionListener{
	
   public void actionPerformed(ActionEvent e){
   	 paintLine();
   	}	
   
   

}

Ich versteh es immer noch nicht , sorry...
 
R

Roar

Gast
uff.. das war falsch. heir der code:
Code:
class paintPanel extends JPanel{
   
     private boolean malen = false; 
     private int height;
     private int width;    
   
     public void paintComponent(Graphics g){
        this.height = getSize().height;
        this.width = getSize().width;

     //Ränder des Koordinatensystems
     g.setColor(Color.blue);
     g.drawLine(10,10,10,height-10);
     g.drawLine(10,height-10,width-10,height-10);        

       if(malen){
       g.setColor(Color.red);
       g.drawString("Geht es ??",width/2,height/2);
       }
     }
     
    public static void paintLine(){
this.malen = true;
System.out.println(this.malen);
this.repaint();
    }
}
das ^^ zeichnet dir beim instantiieren 2 linien, und mein paintLine(); zeichnet er dir den string ( soll das so sein?)
die variablen würd ich als private deklarieren.

den actionlistener von der obigen klasse abzuleiten war doch sinnlos. ich glaub du hast da was bei der objektorientierten programmierung nicht verstanden ???:L
hier:
Code:
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e)
{
paintPanel.paintLine();
}
}
jetzt gibt es das problem dass du keein instanz von paintPanel hast, also nicht direkt auf dein instantiiertes panel zugreifen kannst, sondern mit der static methode arbeiten musst. besser wär natürlich du hättest ie actionperformed methode in der gleichen klasse wie auch deine gui und die instantiierung deines paintPanels, da könntest du direkt deine instanz ansprechen.

PS: der code da oben war nur so hingekritzelt, kann also sein dass da kleine fehler drin sind
 

VerstehNix

Mitglied
Hab es jetzt hinbekommen dass auf Knopfdruck der Text erscheint, aber jetzt malt er mir den paint Knopf oben nochmal in das Koordinatensystem... WARUM ????

fehler.jpg


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


class mainframe extends JFrame implements ActionListener{
  
  
  static paintPanel grafik = new paintPanel();
      
  mainframe(){ 
    Container c = getContentPane();
     
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout());
          
          //Center Komponente
          mainPanel.add(grafik, BorderLayout.CENTER);
          
          //South Komponente
          JButton paint = new JButton("paint");
          paint.addActionListener(this);
        mainPanel.add(paint, BorderLayout.SOUTH);
    
    c.add(mainPanel);
    setSize(400,400);
    setVisible(true);     
   }



         public void actionPerformed(ActionEvent e){
             grafik.paintLine();
          }


    public static void main(String [] args){
        mainframe main = new mainframe();
    
    }
    
}

und hier der Code vom paintPanel :
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class paintPanel extends JPanel{
	 
	 private boolean malen = false;
     private int height; 
     private int width; 	
	
     public void paint(Graphics g){
        this.height = getSize().height;
        this.width = getSize().width;
     
     //Ränder des Koordinatensystems
     g.setColor(Color.blue);
     g.drawLine(10,10,10,height-10);
     g.drawLine(10,height-10,width-10,height-10);	
       
       if(malen){
       g.setColor(Color.red);
       g.drawString("Geht es ??",width/2,height/2);
      
       }
       
     }
     
	 public void paintLine(){
	   malen = true;
	   this.repaint();
	   System.out.println(malen);
	 }
}
 

VerstehNix

Mitglied
Oh ja, jetzt hab ichs... hab in die actionPerformed einfach nochmal ein this.repaint() gepackt damit der ganze Frame sich neu zeichnet... wie ich da drauf gekommen bin weiß ich auch nicht... egal funzt
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
izoards JavaFX Background Task warten auf Knopfdruck AWT, Swing, JavaFX & SWT 4
D JavaFX Fläche auf Knopfdruck blinken lassen AWT, Swing, JavaFX & SWT 3
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
V JFreeChart: Tooltip auf Knopfdruck anzeigen AWT, Swing, JavaFX & SWT 2
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
F Swing Auf Knopfdruck ein Fenster schliessen AWT, Swing, JavaFX & SWT 12
H String auf Knopfdruck in JPanel zeichnen. AWT, Swing, JavaFX & SWT 6
B Panels wechseln auf Knopfdruck AWT, Swing, JavaFX & SWT 17
Weiti Swing Animationen - Drehung aller Komponenten auf Knopfdruck AWT, Swing, JavaFX & SWT 12
B bin am verzweifeln, will auf knopfdruck durch ne überprüfung die labels unsichtbar machen AWT, Swing, JavaFX & SWT 2
M Animation auf JPanel per Knopfdruck AWT, Swing, JavaFX & SWT 12
D Schließen der GUI auf knopfdruck AWT, Swing, JavaFX & SWT 7
E JDialog auf Knopfdruck schliessen AWT, Swing, JavaFX & SWT 2
S Object auf Knopfdruck dem Frame hinzufügen AWT, Swing, JavaFX & SWT 2
G Internationalisierung auf Knopfdruck AWT, Swing, JavaFX & SWT 4
T SWT:Tabelle auf Knopfdruck mit aktualisierten Daten zeichnen AWT, Swing, JavaFX & SWT 9
F Bild auf Knopfdruck AWT, Swing, JavaFX & SWT 4
G ActionListener - Texte ändern per Knopfdruck AWT, Swing, JavaFX & SWT 4
K Java2D auf Knopfdruck weiterzeichnen AWT, Swing, JavaFX & SWT 4
N Schnelleres Malen AWT, Swing, JavaFX & SWT 22
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
M Punkte malen AWT, Swing, JavaFX & SWT 1
M Schrift "malen" AWT, Swing, JavaFX & SWT 11
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
L Gradient Hintergrund malen und durchscheinen lassen AWT, Swing, JavaFX & SWT 8
windl Querstreifen beim Bilder malen und anpassen an neue CPU AWT, Swing, JavaFX & SWT 12
S JButton in JLabel malen AWT, Swing, JavaFX & SWT 7
E JButton Text malen AWT, Swing, JavaFX & SWT 3
J Swing Malen auf JPanel mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 21
B 2D-Grafik Malen/übermalen mit Canvas AWT, Swing, JavaFX & SWT 5
K swing/awt Panel punkte malen AWT, Swing, JavaFX & SWT 4
G Auf Image malen AWT, Swing, JavaFX & SWT 12
B Wie Panel neu Laden/Malen/Aktualisieren AWT, Swing, JavaFX & SWT 14
G kreis malen -> welche funktion? AWT, Swing, JavaFX & SWT 3
V Framework zum Zeichnen/Malen? AWT, Swing, JavaFX & SWT 7
D bei Thread in JComponent malen NullPointerException AWT, Swing, JavaFX & SWT 3
J Einmal gleichzeitig auf zwei Graphics malen? AWT, Swing, JavaFX & SWT 5
C ".tif" Image in Java einbinden und malen lassen AWT, Swing, JavaFX & SWT 7
H auf einem Bild malen AWT, Swing, JavaFX & SWT 4
N malen => 1 Sekunde warten => malen AWT, Swing, JavaFX & SWT 2
V Punkte malen im Panel AWT, Swing, JavaFX & SWT 3
U Malen auf Buffered Image AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben