Fehler bei method(add)

DrIkarus

Mitglied
Hallo,
ich bekomme hier einen Fehler in Zeile 68:
Der Fehler lautet: The Method add(Component) in the type Container is not applicable for the arguments (Rectangle)

Kein Plan was das bedeuten soll, vielleicht hat jemand eine Idee.

Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Frame extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
	private JPanel panel;
	private JTextField textField;
	private JLabel label;
	
	public static void main(String[]args){
		new Frame();
		
	}
	Frame(){
		super();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setPreferredSize(new Dimension(312,214));
		
		panel = new JPanel(null);
		
		label = new JLabel("Test");
		label.setBounds(3,4,80,20);
		label.setHorizontalAlignment(JLabel.LEFT);
		label.setBorder(BorderFactory.createLineBorder(Color.black));
		panel.add(label);
		
		JButton button = new JButton();
		button.setBounds(103, 94, 100, 20);
		button.setHorizontalAlignment(JLabel.CENTER);
		button.setText("Button");
		add(button);
		
		//ActionListener für den Button;
		AListener aListener = new AListener(this);
		button.addActionListener((ActionListener) aListener);
		
		textField = new JTextField();
		textField.setBounds (103,64,100,20);
		textField.setHorizontalAlignment(JLabel.RIGHT);
		panel.add(textField);
		
		JTextField textField2 = new JTextField();
		textField2.setBounds(223,74,50,20);
		textField2.setHorizontalAlignment(JLabel.RIGHT);
		panel.add(textField2);
		
		FListener fListener = new FListener(this);
		textField.addFocusListener(fListener);
		
		Rectangle ecke = new Rectangle();
		ecke.setBounds(23,64,70,30);
		panel.add(ecke);
		
		add(panel);
		pack();
		setVisible(true);
				
	}
	
	public JTextField getTextField(){
		return textField;
	}
		
	public JTextField getTextField1() {
		// TODO Auto-generated method stub
		return null;
	}
	public void switchLabelText() {
		if (label.getText().equals("Test")){
			label.setText("AlernativText");
		} else {
			label.setText("Test");
		}
	}
	}
 
Die Klasse Rectangle ist nicht vom Typ Component abgeleitet, somit kannst du diese auch nicht einem Componentcontainer hinzufügen. Was möchtest du denn dort genau machen? Evtl. ist an dieser Stelle ein Panel die richtige Wahl.
 
Weil
Java:
panel.add();
ein Argument vom Typ Component erwartet.
Und wie schon gesagt wurde, ist Rectangle nicht vom Typ Component :)
Was genau eine Methode fuer Argumente erwartet, kannst du auch in der API nachsehen.
add(Component comp)
Appends the specified component to the end of this container.
 
Zuletzt bearbeitet:
Es ist eigentlich ganz einfach: Jeder Container (in deinem Fall JPanel panel) kann weitere Swing components beinhalten. Es ist aber wichtig, dass es Swing components sind (abgeleitet von java.awt.Component). Die Klasse Rectangle erfüllt genau diese Bedingung nicht. Sie ist dazu da die geometrische Figur Rechteck zu beschreiben, ist aber kein Bestandteil einer grafischen Oberfläche. Ein Panel hingegen ist genau dies und wie es der Zufall so will im Normalfall rechteckig.

Ich denke es ist wichtig das zu verstehen. Wenn du noch weitere Fragen hast, zöger nicht sie zu stellen.
 
Zurück