2017-12-02 4 views
-1

Was ich versuche zu tun ist, wenn ich auf den Knopf klicke, muss das Rechteck gezeichnet werden.Wie kann ich die Java-Grafik mit Event Handling verwenden?

Aber ich habe einige Verwirrungen. Hier ist der Code:

package painting; 
import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import javax.swing.event.*; 

public class Painting { 

    JFrame jf ; 
    public static void main(String[] args) {  
     Painting p = new Painting(); 
     p.runn(); 
    } 
     public void runn(){ 

     jf = new JFrame("Try"); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.setLocationRelativeTo(null); 
     jf.setSize(400,400);  
     jf.setVisible(true); 

     JButton jb = new JButton("Click"); 
     jb.setBounds(200,200,100,60); 
     jf.add(jb); 
     //jf.add(jb,BorderLayout.SOUTH); 
     //jf.setLayout(null);  
     Handler handle = new Handler(); 
     jb.addActionListener(handle); 
     } 
     private class Handler implements ActionListener{ 
      @Override 
      public void actionPerformed(ActionEvent ae) 
      { 
      Mainting maint = new Mainting();  
      jf.add(maint); 
     }   


} 
} 

und die andere Klasse:

package painting; 
import java.awt.*; 
import javax.swing.*; 


public class Mainting extends JPanel { 

    @Override 
    public void paintComponent(Graphics g) 
      { 
     super.paintComponent(g); 
     g.fillRect(0,0,30,30); 

      }  
} 

Nun, das Problem ist, wenn ich diesen Code ausführen eine Taste, um den gesamten Bildschirm zu verdecken erscheint und wenn ich auf das, nichts passiert. Ich fand heraus, dass das ist, weil der Layout-Manager nicht definiert ist, und wenn ich den Layout-Manager auf null setzen möchte, scheint die Schaltfläche in Ordnung, aber wenn ich darauf klicke, wird das Rechteck nicht angezeigt (auch weil wir Verwenden Sie den Null-Layout-Manager zum Zeichnen von Grafiken.

Und schließlich, wenn ich versuche, einen Layout-Manager zu setzen, Sagen - Border-Layout - die Schaltfläche erscheint wie es sollte, aber wie Compiler sagt, es braucht int Parameter gezeichnet werden und nicht Richtungen!

Bitte helfen!

+0

1) Verwenden Sie eine logische und konsistente Form der Einrückung Code Zeilen und Blöcke. Die Einrückung soll den Codefluss leichter nachvollziehen lassen! Jemand hat das in der letzten Frage für dich getan, aber erwarte nicht, dass andere ständig für dich tun, was du für jeden tun solltest, der den Code liest. 2) Für eine bessere Hilfe, poste ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/), wie ich es als Antwort auf deine [letzte Frage] gepostet habe (https: //stackoverflow.com/a/47605791/418556). –

Antwort

0

Verwenden Sie JPanel und fügen Sie dann Schaltfläche hinzu. setBounds() funktioniert nicht gut mit Swing.Something This -

JButton button = new JButton(...); 
JPanel wrapper = new JPanel(); 
wrapper.add(button); 
frame.add(wrapper, BorderLayout.PAGE_START); 
Verwandte Themen