2016-07-10 9 views
0

Ich bin neu in Java und ich wollte an einem einfachen Malprogramm mit Java Swing arbeiten. mein einfaches Malprogramm sollte eine Form wie Dreieck, Kreis und Quadrat zeichnen, wann immer ich auf Knöpfe klickte. Ich habe es geschafft, diese Formen zu zeichnen und es ohne Knöpfe zu drucken, aber ich kann es nicht mit ActionListener machen?java Swing Taste Aktion

Wie Sie sehen, ich habe eine einzelne Taste im Moment, ich möchte das Oval zeichnen, wenn diese Schaltfläche angeklickt wird. Dies ist der Code, den ich auf sie bisher tätig bin:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 


public class PaintProject extends JComponent implements ActionListener{ 
    public static void main(String[] args) { 


     JFrame frame=new JFrame("NEW PAINT PROGRAME!"); 
     JButton button1=new JButton("ADD"); 
     PaintProject paint=new PaintProject(); 

     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setLayout(new FlowLayout()); 
     frame.add(paint); 
     frame.add(button1); 

     frame.pack(); 
     frame.setVisible(true); 

    } 
    @Override 
    public Dimension getPreferredSize(){ 
     return new Dimension(500,500); 

    } 
    @Override 
    protected void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillOval(0,0, 100, 100); 

    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 


    } 


} 
+0

Mögliche Duplikat von [Wie JFrame nur zu machen, malen, nachdem ich klicke?] (Http://stackoverflow.com/questions/23752636/how-to-make-jframe-paint-only-after-i- click-button) –

Antwort

0

Könnten Sie bitte folgende Schritte:

Schritt 1:

Insert button1.addActionListener(paint); kurz nach PaintProject paint=new PaintProject(); im main Verfahren von PaintProject.java

Schritt 2:

Entfernen Sie die Methode mit dem Namen protected void paintComponent(Graphics g). Stattdessen erstellen folgende Methode:

private void drawOval(){ 
    Graphics g = this.getGraphics(); 
    g.setColor(Color.red); 
    g.fillOval(0,0, 100, 100);   
} 

Schritt 3:

Rufen Sie das obige Verfahren wie folgt:

@Override 
public void actionPerformed(ActionEvent e) { 
    drawOval();  
} 

EDIT:

folgende Beispiel zeigt, wie zwei ziehen Formen, wenn auf die entsprechenden Schaltflächen geklickt wird:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.WindowConstants; 

public class PaintProject extends JComponent implements ActionListener { 
    public static void main(String[] args) { 

     JFrame frame = new JFrame("NEW PAINT PROGRAME!"); 
     JButton ovalButton = new JButton("Oval"); 
     ovalButton.setActionCommand("Oval"); 

     JButton rectangleButton = new JButton("Rectangle"); 
     rectangleButton.setActionCommand("Rectangle"); 

     PaintProject paint = new PaintProject(); 
     ovalButton.addActionListener(paint); 
     rectangleButton.addActionListener(paint); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setLayout(new FlowLayout()); 
     frame.add(paint); 
     frame.add(ovalButton); 
     frame.add(rectangleButton); 

     frame.pack(); 
     frame.setVisible(true); 

    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(500, 500); 

    } 

    private void drawOval() { 
     Graphics g = this.getGraphics(); 
     g.setColor(Color.red); 
     g.fillOval(0, 0, 100, 100); 
    } 

    private void drawRectangle() { 
     Graphics g = this.getGraphics(); 
     g.setColor(Color.green); 
     g.fillRect(150, 150, 100, 100); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     String command = e.getActionCommand(); 
     if (command.equals("Oval")) { 
      drawOval(); 
     } else if (command.equals("Rectangle")) { 
      drawRectangle(); 
     } 

    } 

} 
+0

Danke, es hat funktioniert, noch ein Problem, wenn ich eine weitere Schaltfläche hinzufüge, um Rechteck für mich zu zeichnen, wie ich es in actionlistener ändern sollte? Ich habe 4 Tasten und alle Tasten zeichnen die gleiche Form für mich im Moment –

+0

@ nah1991 Schauen Sie sich bitte den 'EDIT'-Abschnitt der Antwort, Sie sind sicher, einen Hinweis zu finden. Übrigens hast du fälschlicherweise die Antwort "nicht akzeptiert". –

+0

Vielen Dank :) :) –