Probleme mit Graphics G

  • Themenstarter Themenstarter holgie
  • Beginndatum Beginndatum
H

holgie

Gast
Hallo zusammen,
ich habe ein kleines Übungsprogramm welches mittels zweier Buttons die Hindergrundfarbe ändert. Nun wollte ich zusätzlich eine Linie zeichnen per
Java:
 public void paint (Graphics g){
	  g.drawLine(50,50,100,100);
  }
Wenn ich dies jedoch einfüge baut sich der Frame nicht mehr richtig auf. Ich sehe nur einen Button und die Farbänderung funktioniert nicht mehr. Ich denke mal dass es an dem eventlistener liegt.
Ich weiß jedoch nicht wie ich das ganze lösen kann.
Bitte daher um Unterstützung. Das Programm findet ihr unten.
Gruß
Holger

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


public class TwoButtons extends JFrame implements ActionListener


{
  JButton redButton ;
  JButton grnButton ;

  // constructor for TwoButtons
  public TwoButtons()                           
  {
    super( "Überschrift");
    
    redButton = new JButton("Red");
    grnButton = new JButton("Green");
    redButton.setActionCommand( "rot" );   // set the  command 
    grnButton.setActionCommand( "gruen" ); // set the  command   

    // register the buttonDemo frame
    // as the listener for both Buttons.
    redButton.addActionListener( this );
    grnButton.addActionListener( this );     

    setLayout( new FlowLayout() ); 
    add( redButton );                      
    add( grnButton );
    
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );   
  }
  public void paint (Graphics g){
	  g.drawLine(50,50,100,100);
  }
  
  public void actionPerformed( ActionEvent evt)
  {
        if ( evt.getActionCommand().equals( "rot" ) )
    	getContentPane().setBackground( Color.red);
    else 
      getContentPane().setBackground( Color.green );    

   repaint();
    
   
  }

  
  public static void main ( String[] args )
  {
    TwoButtons demo  = new TwoButtons();

    demo.setSize(300, 250 );     
    demo.setVisible( true );      
  }
 
}
 
Zuletzt bearbeitet von einem Moderator:
Wenn du etwas überschreibst, solltest du wenn möglich immer "super....()" aufrufen. Damit wird die Originalmethode aufgerufen. Ich vermute, deshalb wird nicht mehr alles gezeichnet.

Java:
public void paint (Graphics g){
super.paint(g);
g.drawLine(50,50,100,100);
}

Bei Swing sollte man aber allgemein paintComponent überschreiben. (Nicht mit paintComponents verwechseln).
 
Bei einem JFrame gibt es kein paintComponent. Es empfiehlt sich aber dringend, dem Frame nicht in sein zeichnen reinzupfuschen. Üblicherweise ist der Frame nur ein "Container" für das GUI, und die eigentliche "Hauptcomponent" des GUIs ist ein JPanel, das im ContentFrame des Frames liegt. (Und bei diesem JPanel überschreibt man dann paintComponent).

Jaja, die Swing-Snippets sind nicht vergessen. (Ich braucht Urlaub, dringend ;( )
 

Zurück
Oben