Kleines Rechteck mit Farbe gefüllt darstellen

hi,
ich möchte ein einfaches Rechteck mit anpassbarer Größe (int x, int y) erstellen das ich mit Farbe füllen kann und dann in eine Leiste (SüdPanel vom BorderLayout) einfügen mit text daneben…
gibs da schon fertige Klassen für einfache Rechtecke? hab da noch nix sinnvolles gefunden…

Was hast du denn gesucht? Google liefert 39.000 Ergebnisse wovon auf der ersten Seite mind 40 sehr gute Beispiele liefern.

Z.B. http://www.info-wsf.de/index.php/Wie_kann_man_in_Java_zeichnen%3F

Im Byte-Welt-Wiki gibt es einen großen Beitrag zum Malen in AWT und Swing.
Außerdem Malen in Swing Teil 1: der grundlegende Mechanismus

ok ich wollte ein einfaches Rechteck zeichnen, beim ersten versuch hats auch geklappt es wurde angezeigt, beim zweiten mal (hab nix geändert) auf einmal nicht mehr, es wird nix mehr gezeichnet, irgendwie spinnt Eclipse manchmal oder liegt das an mir?

in dem Code ganz am Ende eigentlich nur interessant ist der Code für das Rechteck, es soll mit dem Konstrukter in der Klasse aufgerufen und gezeichnet werden und in das rightSouth Panel gebracht werden.

package de.htw.saarland.kinodb.window;

import java.awt.BorderLayout;

public class Ticket_Overview extends JFrame {

	private  JFrame frame;
	private JPanel leftSplitPane, rightSplitPane;
	private JSplitPane splitPane;
	private String[] dings = {"PC","Desktop","Computer","Lampe","Flugzeug","Haus","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"};
	private JList filmlist;
	private JScrollPane filmScrollPane;
	private JPanel rightNorth, rightSouth;
	private DefaultListModel<Object> listModel;
	private JTextField filmname;
	private Border blackline;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					new Ticket_Overview();						
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */	
	public Ticket_Overview() {
		frame = new JFrame("Kinoverwaltung V0.1 - Ticketverkauf");
		//setTitle("Kinoverwaltung V0.1 - Ticketverkauf");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBounds(100, 100, 753, 452);
		frame.setVisible(true);
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnStart = new JMenu("Start");
		menuBar.add(mnStart);
		
		JMenuItem mntmEntry_2 = new JMenuItem("Entry1");
		mnStart.add(mntmEntry_2);
		
		JMenuItem mntmEntry_3 = new JMenuItem("Entry2");
		mnStart.add(mntmEntry_3);
		
		JMenu mnHilfe = new JMenu("Hilfe");
		menuBar.add(mnHilfe);
		
		JMenuItem mntmEntry = new JMenuItem("Entry1");
		mnHilfe.add(mntmEntry);
		
		JMenuItem mntmEntry_1 = new JMenuItem("Entry2");
		mnHilfe.add(mntmEntry_1);
		getContentPane().setLayout(null);
		
		
		
		
		//################################################################################# LINKES SPLITPANE
		
		//GRIDBAGLAYOUT FÜR DAS LINKE SPLITPANE PANEL FESTLEGEN
		GridBagLayout gbl = new GridBagLayout();		
		
		
		//GRIDBAGCONSTRAINT FÜR DIE LISTE DER FILME IN DER TICKETÜBERSICHT
		GridBagConstraints listConstraints = new GridBagConstraints();
		listConstraints.gridx 		= 0;
		listConstraints.gridy 		= 0;
		listConstraints.fill 		= GridBagConstraints.BOTH;	
		listConstraints.gridwidth 	= 1;
		listConstraints.gridheight 	= 1;
		listConstraints.weightx 	= 0; //Verteilung des Überschüssigen Platzes 
		listConstraints.weighty 	= 100;
		listConstraints.insets =  new Insets(0,0,10,0);
		
		//GridLayout gl = new GridLayout(0,1);		
		
		//LINKES SPLITPANE ERSTELLEN MIT GRIDBAGLAYOUT
		leftSplitPane = new JPanel();
		leftSplitPane.setLayout(gbl);
		leftSplitPane.setPreferredSize(new Dimension(300,600));
		
		//LISTE DER FILME ERSTELLEN UND INS LINKE PANEL AN ERSTER STELLE EINSETZEN
		listModel = new DefaultListModel();
		listModel.addElement("Star Trek Zorn des Khan");
		listModel.addElement("Mission Impossible 3");
		listModel.addElement("Herr der Ringe Teil 1");
		for (int i=0;i <= 6;i++) {
			listModel.addElement(dings**);
		}
	
		class ListHandler implements ListSelectionListener {

			@Override
			public void valueChanged(ListSelectionEvent e) {
			
				if (!e.getValueIsAdjusting()) {
				String s = (String) filmlist.getSelectedValue();					
				filmname.setText(s);
				
				}
				 
			}
			
		}
		
		
		filmlist = new JList(listModel);	
		//filmlist.setPreferredSize(new Dimension(100, 300));
		filmlist.setVisibleRowCount(10);
		filmlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);		
		filmlist.addListSelectionListener(new ListHandler());
		
		
		filmScrollPane = new JScrollPane(filmlist,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);///JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		filmScrollPane.setPreferredSize(new Dimension(100,300));
		//gbl.setConstraints(leftSplitPane, listConstraints);
		leftSplitPane.add(filmScrollPane, listConstraints);
		
		
		
		
		//BUTTON FÜR KOMMENDE FILME ERSTELLEN MIT CONSTRAINTS UNTER DIE LISTE
		GridBagConstraints kommendeFilmeConstraints = new GridBagConstraints();
		kommendeFilmeConstraints.gridx = 0;
		kommendeFilmeConstraints.gridy = kommendeFilmeConstraints.RELATIVE;
		kommendeFilmeConstraints.gridwidth= 1;
		kommendeFilmeConstraints.gridheight=1;		
		kommendeFilmeConstraints.insets =  new Insets(0,0,10,0);
	
				
		JButton kommendeFilme = new JButton("kommende Filme");
		kommendeFilme.setHorizontalAlignment(SwingConstants.LEADING);
		leftSplitPane.add(kommendeFilme,kommendeFilmeConstraints);
		//gbl.setConstraints(kommendeFilme, kommendeFilmeConstraints );
		
		
		//CONSTRAINTS FÜR TEXTFELD ERSTELLEN
		GridBagConstraints reservierungFeldConstraints = new GridBagConstraints();
		reservierungFeldConstraints.gridx = 0;
		//ReservierungFeldConstraints.gridy = 0;
		//ReservierungFeldConstraints.gridwidth = 1;
		//ReservierungFeldConstraints.gridheight = 1;		
		reservierungFeldConstraints.fill=GridBagConstraints.HORIZONTAL;
		reservierungFeldConstraints.weightx=1.0;
		reservierungFeldConstraints.weighty=0.5;	
		reservierungFeldConstraints.insets = new Insets(10,0,10,0);
		
		//TEXTFELD ERSTELLEN MIT CONSTRAINTS UNTER DEN BUTTON
		JTextField reservierungFeld = new JTextField("Reservierung suchen");
		reservierungFeld.setLayout(new GridBagLayout());
		reservierungFeld.setPreferredSize(new Dimension(1000,30));	
		reservierungFeld.setBackground(Color.RED);		
		leftSplitPane.add(reservierungFeld, reservierungFeldConstraints);
		//gbl.setConstraints(reservierungFeld, ReservierungFeldConstraints);
		
		
		//BUTTON ERSTELLEN FÜR RESERVIERUNG SUCHEN MIT CONSTRAINTS UNTER DAS RESERVIERUNG SUCHEN-FELD
		JButton reservierungSuchen = new JButton("Reservierung suchen");
		reservierungSuchen.setLayout(new GridBagLayout());
		
		GridBagConstraints reservierungSuchenConstraint = new GridBagConstraints();
		reservierungSuchenConstraint.gridx = 0;
		reservierungSuchenConstraint.gridx = 0;
		reservierungSuchenConstraint.gridwidth = 1;
		reservierungSuchenConstraint.gridheight = 1;
		reservierungSuchenConstraint.weightx = 1.0;
		reservierungSuchenConstraint.weighty = 0.5;
		
		leftSplitPane.add(reservierungSuchen,reservierungSuchenConstraint);	
		
		
		
		//########################################################################### RECHTES SPLITPANE
		
		//RECHTES SPLITPANEL ERSTELLEN MIT BORDERLAYOUT
		rightSplitPane = new JPanel(new BorderLayout());	
		rightSplitPane.setPreferredSize(new Dimension(800,600));
		
		
		//CONSTRAINTS FÜR BORDERLAYOUT.NORTH ERSTELLEN
		GridBagConstraints constraints = new GridBagConstraints();
		//constraints.gridx = 0;
		//constraints.gridy = 0;			
		constraints.fill 		= GridBagConstraints.BOTH;	
		constraints.gridwidth 	= 1;
		constraints.gridheight 	= 1;
		constraints.weightx 	= 0; //Verteilung des Überschüssigen Platzes 
		constraints.weighty 	= 0;
		constraints.insets =  new Insets(0,0,0,0);
				
		
		//PANEL FÜR  BORDERLAYOUT.NORTH ERSTELLEN MIT CONSTRAINTS		
		rightNorth = new JPanel(new GridLayout(2, 1,0,40));
		
		JPanel buttonPanel = new JPanel(new GridLayout(1, 0,50,0)); //oberstes Panel im BorderLayout Nord Region
		//JPanel headPanel = new JPanel(new GridLayout(2, 1));	// Panel eins drunter
		
		rightNorth.add(buttonPanel);
		
		JTextField leinwand = new JTextField();
		leinwand.setBackground(Color.CYAN);
		leinwand.setHorizontalAlignment(JTextField.CENTER);
	    rightNorth.add(leinwand);
	    

	    blackline = BorderFactory.createLineBorder(Color.black);
	    TitledBorder  title = BorderFactory.createTitledBorder(
                       blackline, "Leinwand");
	    title.setTitleJustification(TitledBorder.CENTER);
	    leinwand.setBorder(title); 
	    
		rightSplitPane.add(rightNorth,BorderLayout.NORTH);
		//rightNorth.setLayout(new BoxLayout(rightNorth, BoxLayout.X_AXIS));
		
		JLabel filmtitel = new JLabel("Filmtitel: ");		
		//filmtitel.setPreferredSize(new Dimension(50,30));		
		buttonPanel.add(filmtitel );
		
		
		filmname = new JTextField("Filmname");
		//filmname.setLineWrap(true);
		//filmname.setWrapStyleWord(true);
		//filmname.setMargin(new Insets(0,0,0,0));
		filmname.setPreferredSize(new Dimension(300,10));
		buttonPanel.add(filmname);	
		
		
		JLabel uhrzeitdatum = new JLabel("Datum,Uhrzeit");
		buttonPanel.add(uhrzeitdatum);
		
		JTextField datumuhrzeit = new JTextField("Datum,Uhrzeit");
		buttonPanel.add(datumuhrzeit);
		
		JLabel saal = new JLabel("Saal");
		saal.setHorizontalAlignment(SwingConstants.RIGHT);
		buttonPanel.add(saal);
		
		JTextField saaltext = new JTextField("Saal");
		buttonPanel.add(saaltext);
		
		JButton weiter = new JButton("Weiter");
		//weiter.setPreferredSize(new Dimension(50,30));
		weiter.setBackground(Color.LIGHT_GRAY);
		weiter.setHorizontalAlignment(SwingConstants.RIGHT);
		buttonPanel.add(weiter);
		
		
		//JTextField test = new JTextField("ALKDLAKSLDKLAKSLDKLASKD");
		
		
		
		rightSouth = new JPanel();
		rightSplitPane.add(rightSouth,BorderLayout.SOUTH);
		rightSouth.setBackground(Color.WHITE);
		rightSouth.setPreferredSize(new Dimension(600,30));
		rightSouth.setBorder(BorderFactory.createLineBorder(Color.black));
				
		splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,  leftSplitPane, rightSplitPane);	
		//splitPane.setSize(new Dimension(600,400));
		splitPane.setOneTouchExpandable(true);		
		//splitPane.setBounds(0, 0, 434, 241);
		splitPane.setResizeWeight(0.1); // Fensterverhältnis links / rechts zu Beginn
		//splitPane.setDividerLocation(150 + splitPane.getInsets().left); //linke Breite : 150 px bis zum Divider
		/*splitPane.setDividerLocation(splitPane.getSize().width  //rechte Breite: 150 px bis zum Divider
                - splitPane.getInsets().right
                - splitPane.getDividerSize()
                - 150);*/
		splitPane.setDividerLocation(0.5); //25% of space go to left
		frame.getContentPane().add(splitPane);
		
		
		MyCanvasPanel mycanvas = new MyCanvasPanel();
		rightSouth.add(mycanvas);
		
		frame.pack();
		
		
		
	}
	
	 private class MyCanvasPanel extends JPanel {
		 
		   /**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		public MyCanvasPanel() {              // Construktor der Klasse
		   }
		 
		   @Override
		   public void paintComponent(Graphics g) {
		     super.paintComponent(g); 	     
		   
		     g.fillRect(10,10,10,10);
		     g.setColor(Color.RED);
		   }
		 }

}

weiss jemand warum das auf einmal nicht mehr gezeichnet wird bzw was ich falsch mache?

Viel überflüssiger Code dabei… beim Drüberschauen fällt auf, dass rightSouth keinen LayoutManager gesetzt bekommt, und standardmäßig so das FlowLayout hat, und das MyCanvasPanel hat keine PreferredSize, deswegen kommt da vielleicht nicht das gewünschte raus. Ein kleineres Beispiel (KSKB!) könnte schon helfen, aber sowas wie

MyCanvasPanel mycanvas = new MyCanvasPanel();
rightSouth.setLayout(new GridLayout(1,1)); // ENTWEDER das ...
mycanvas.setPreferredSize(new Dimension(30,30)); // ODER das
rightSouth.add(mycanvas);

könnte ein erster Schritt sein…

[QUOTE=Fred12]…
gibs da schon fertige Klassen für einfache Rechtecke? hab da noch nix sinnvolles gefunden…[/QUOTE]

Ja ^^ ein rotes JPanel zum Bleistsift ^^

ok die Rechtecke sitzen, allerdings hat beim GridLayout jede KOmponente seinen festen Platz und die Abstände stimmen nicht, zum Roten rechteck soll direkt daneben text stehen “Gekauft” und zum orangenen der Text “reserviert” rechts daneben… wie kann ich das machen? dann besser FlowLayout nehmen?

und ich hab das Problem bei den Rechtecken wird die Farbe nicht gessetzt und ich weiss nicht warum …

hier ein Ausschnitt aus meinem Code:

		
		rightSouth = new JPanel();
		rightSouth.setLayout(new GridLayout(1,6));
		rightSplitPane.add(rightSouth,BorderLayout.SOUTH);
		rightSouth.setBackground(Color.WHITE);
		rightSouth.setPreferredSize(new Dimension(600,30));
		rightSouth.setBorder(BorderFactory.createLineBorder(Color.black));
				
		splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,  leftSplitPane, rightSplitPane);	
		//splitPane.setSize(new Dimension(600,400));
		splitPane.setOneTouchExpandable(true);		
		//splitPane.setBounds(0, 0, 434, 241);
		splitPane.setResizeWeight(0.1); // Fensterverhältnis links / rechts zu Beginn
		//splitPane.setDividerLocation(150 + splitPane.getInsets().left); //linke Breite : 150 px bis zum Divider
		/*splitPane.setDividerLocation(splitPane.getSize().width  //rechte Breite: 150 px bis zum Divider
                - splitPane.getInsets().right
                - splitPane.getDividerSize()
                - 150);*/
		splitPane.setDividerLocation(0.5); //25% of space go to left
		
		frame.getContentPane().add(splitPane);
		
			
		
		class RedRectangle extends JPanel {

			/** 
			 */
			
			public RedRectangle() {              // Construktor der Klasse

			}
			@Override
			public void paintComponent(Graphics g) {
				super.paintComponent(g); 	
				Graphics2D g2d = (Graphics2D)g;
				g2d.fillRect(5,5, 20, 20);
				g2d.setColor(Color.RED);

			}
		}
		
		
		RedRectangle redrect = new  RedRectangle();
		redrect.setPreferredSize(new Dimension(30,30));		
		rightSouth.add(redrect);

		JLabel reserviert = new JLabel("Gekauft");
		rightSouth.add(reserviert);
		
		
		class OrangeRectangle extends JPanel {

			/** 
			 */
			
			public OrangeRectangle() {              // Construktor der Klasse

			}
			@Override
			public void paintComponent(Graphics g) {
				super.paintComponent(g); 	
				Graphics2D g2d = (Graphics2D)g;
				g2d.fillRect(5,5, 20, 20);
				g2d.setColor(Color.ORANGE);

			}
		}
		
		OrangeRectangle orangerect = new OrangeRectangle();
		orangerect.setPreferredSize(new Dimension(30,30));
		rightSouth.add(orangerect);
		
		JLabel isreserved = new JLabel("Reserviert");
		rightSouth.add(isreserved);
		
		
		class BlueRectangle extends JPanel {

			/** 
			 */
			
			public BlueRectangle() {              // Construktor der Klasse

			}
			@Override
			public void paintComponent(Graphics g) {
				super.paintComponent(g); 	
				Graphics2D g2d = (Graphics2D)g;
				g2d.fillRect(5,5, 20, 20);
				g2d.setColor(Color.BLUE);

			}
		}
		
		BlueRectangle bluerect = new BlueRectangle();
		rightSouth.add(bluerect);
		
		JLabel actualChoice = new JLabel("aktuell ausgewaehlt");
		rightSouth.add(actualChoice);
		
		
		//SeatTestMain sitztest = new SeatTestMain();
		//rightSplitPane.add();
		
		
		
		frame.pack();
		
		
		
			
	}
			```

*** Edit ***
  @Marco13  ok aber ich dachte FlowLayout ist flexibler wenn man seine Komponenten platzieren will.. und was meinst du mit kleineres Beispiel (KSKB!) ?

EDIT: mit dem setBackground Befehl für die Farben ( fürs JPanel ;) ) geht das Farbe ändren leider auch nicht, was mach ich da falsch?

Wie auch schon an anderer Stelle: Von einer JComponent zu erben, um einen Sprite zu zeichnen, ist meistes unvorteilhaft. Du willst ja irgendeinen Sitzplan erstellen. Was spricht dagegen, den Sitzplan mit EINEM JPanel, wo man paintComponent überschreibt, direkt komplett selbst mittels Graphics zu zeichnen?

nein jetzt gehts erstmal um das rightSouth panel im süden vom border layout, da will ich nur paar farbige rechtecke mit dem vermerk das diese farbe reserviert bedeutet, gekauft belegt usw… den Sitzplan hab ich übrigens schon soweit
nur bekomm ich keine farbe in diese rechtecke :confused:

*** Edit ***

habs wieder hinbekommen mit der Farbe, musste setColor vor dem paint() setzen…

Also zeichnest du doch selbst o0

Klingt ein bißchen wie http://en.wikipedia.org/wiki/Programming_by_permutation , aber … naja, solange das Ziel erreicht wird … … :wink: