Problem mit paint im Fenster

Xym

Erfahrenes Mitglied
Hi,

ich versuch so 'ne Art paint programm zu machen .

Das habe ich bis jetzt:
Code:
import java.awt.*;
import java.awt.event.*;

public class Datenbank extends Frame
{
  int neu=0;


  private MyWindowListener close = new MyWindowListener();
  private Button Neu = new Button();
  private Button Linie = new Button();
  
  public Datenbank()
  {
    super("Paint");
    this.setSize(800,600);
    this.show();
    this.addWindowListener(close);
    Panel cp = new Panel(null);
    add(cp);
    Neu.setBounds(10, 10, 60, 20);
    Neu.setLabel("Neu");
    Linie.setBounds(100,10,60,20);
    Linie.setLabel("Linie");
    cp.add(Neu);
    cp.add(Linie);
  }

  public boolean handleEvent (Event e)
  {
    if(e.target == Neu)
    {
      neu=1;
      System.out.println(neu);
    }
    return true;
  }

  public void paint ( Graphics g)
  {
   if(neu == 1)
   {
    g.setColor(Color.RED);
    g.fillRect(0,100,800,500);
   }
  }
  public static void main(String args[])
  {
    Datenbank f = new Datenbank();
  }
}

Warum kommt das Rote Viereck nicht, wenn ich auf den Neu Button klicke****
 
Hallo,

du hast da einiges gemacht, was man nicht machen sollte.
Wenn man auf Actions von Buttons reagieren möchte, überschreibt man nicht die handleEvent-Methode. Diese ist sowieso deprecated und sollte nicht mehr verwendet werden.
Wenn du auf den Klick bei Buttons reagieren möchtest, solltest du den ActionListener verwenden.

Dann würde ich dir empfehlen statt AWT und der Klasse Frame, Swing und die Klasse JFrame zu verwenden.

Du solltest auch nicht die paint-Methode des Fensters überschreiben. Sondern ein JPanel oder eine JComponent überschreiben und dort die Methode paintComponent überschreiben. Diese Component solltest du dann dem Fenster hinzufügen.

Da es so aussieht, dass die noch einige Grundlagen fehlen, poste ich dir noch einen Link. Da kannst du dir mal die Grundlagen anlesen.
http://openbook.galileocomputing.de...19_001.htm#mjc8f47f7f51ac3795c46c4544f391b02e

Gruß

Sascha
 
Danke für den Rat die Sachen umzustellen. Wusste nicht das er veraltet ist.
Es sieht nun so aus
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

  public class paint extends JFrame
  {
    int neu=1;
   public paint()
   {
     super(paint.class.getName());
     Container cp = getContentPane();
     cp.setLayout(null);
     
     JButton button = new JButton("Neu");
     button.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        System.out.println(neu);

       }
     });
     button.setBounds(10,10,100,30);
     cp.add(button);
     setSize(600, 480);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setVisible(true);
   }

    public void paintComponent(Graphics g)
    {

     g.setColor(Color.red);
     g.drawOval(0, 0, 20, 20);
    }
   public static void main(String[] argv) {
     new paint();
   }
  }
Bekomme aber immer noch nicht die Grafik.
Was muss ich dafür ändern?
 
1. Klassen beginnen meist mit Großbuchstaben, Methoden mit Kleinbuchstaben (das erleichtert das Lesen von Code)

2. Du sollst nicht die Methode paintComponent() von dem JFrame überschreiben, sondern von einem JPanel oder JComponent, den du dem JFrame hinzufügst.

3. benutzt man meistens einen LayoutManager, z.B. BorderLayout. Den JButton oben kannst du dann in eine horizontale Box packen.

Das ganze kann dann z.B. so aussehen:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Paint extends JFrame
{
	int	neu	= 1;

	public Paint()
	{
		super(Paint.class.getName());
		final Container cp = getContentPane();
		cp.setLayout(new BorderLayout());
		// cp.setLayout(null);
		
		final JButton button = new JButton("Neu");
		button.addActionListener(new ActionListener()
		{
			public void actionPerformed(final ActionEvent e)
			{
				System.out.println(Paint.this.neu);
				
			}
		});
		
		final Box menuBox = new Box(BoxLayout.X_AXIS);
		menuBox.add(button);
		
		// button.setBounds(10, 10, 100, 30);
		cp.add(menuBox, BorderLayout.NORTH);
		
		final AnyPanel panel = new AnyPanel();
		cp.add(panel, BorderLayout.CENTER);
		setSize(600, 480);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	public static void main(final String[] argv)
	{
		new Paint();
	}
}


class AnyPanel extends JPanel
{
	
	@Override
	public void paintComponent(final Graphics g)
	{
		super.paintComponents(g);
		g.setColor(Color.red);
		g.drawOval(0, 0, 20, 20);
	}
}
 
Zuletzt bearbeitet:
Zurück