Auf JPanel zeichnen.



  • Hallo ich habe eine Abstracte Gui Elements Klasse, die von Jpanel abgeleitet ist :

    import javax.swing.JPanel;
    
    @SuppressWarnings("serial")
    public abstract class AbstractGuiElement extends JPanel{
    
    	protected Gui parentGui = null;
    
    	/**
    	 * 
    	 * @param parentGui
    	 */
    	public AbstractGuiElement(Gui parentGui){
    		this.parentGui		= parentGui;
    		this.setBackground(parentGui.BackgroundColor);
    	}
    
    	public abstract void initGuiElement();
    
    	public abstract void updateGuiElement();
    }
    

    Von dieser Klasse habe ich mir nun eine SubKlasse gebildet :

    import java.awt.Dimension;
    import java.awt.Graphics;
    
    import javax.swing.border.LineBorder;
    
    @SuppressWarnings("serial")
    public class GuiElementField extends AbstractGuiElement {
    
    	private int fieldX = -1, fieldY = -1, fieldSize = -1;
    	private boolean activeField = true;
    
    	public GuiElementField(Gui parentGui, int fieldX, int fieldY, boolean activeField, int fieldSize) {
    		super(parentGui);
    
    		this.fieldX		= fieldX;
    		this.fieldY		= fieldY;
    		this.activeField= activeField;
    		this.fieldSize	= fieldSize;
    
    		initGuiElement();
    	}
    
    	@Override
    	public void initGuiElement() {
    
    		setBorder(new LineBorder(parentGui.BorderColor));
    
    		this.setPreferredSize(new Dimension(fieldSize, fieldSize));
    
    		updateGuiElement();		
    		setVisible(true);	
    
    	}
    
    	@Override
    	public void updateGuiElement() {
    
    		if (activeField == true){
    			this.setBackground(parentGui.Player2Color);			
    		}else{
    			this.setBackground(parentGui.InActiveColor);
    		}
    
    	}
    
    	public void paint(Graphics g){
    
    	}
    }
    

    Ich möchte gerne ein JPanel mit Rahmen (LineBorder) und darauf etwas zeichnen. Dazu habe ich die paint Funktion überschireben. Jedoch wird das Jpanel jetzt nur noch weiß dargestellt. Sowohl die Rahmenfarbe als auch die Hintergundfareb gehen verlohren. Weiß jemand Rat ???



  • Überschreib PaintComponent

    public void paintComponent( Graphics g ) 
    {
        super.paintComponent( g );
    }
    

    So... ungefähr



  • Danke. Jedoch geht mir trotzdem die Hintergrundfarbe verlohren



  • this.setBackground(Color.WHITE);

    Oder eine andere Farbe halt.
    Ich habs immer im Construktor.
    Ich änder die zur laufzeit auch nicht...
    Bei mir funktioniert das damit...



  • mhn also bei mir wird der rahmen angezeigt aber leider nicht die hintergrundfarbe

    hierm al mein code:

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    import javax.swing.border.LineBorder;
    
    @SuppressWarnings("serial")
    public class GuiElementField extends AbstractGuiElement implements MouseListener, Definitions{
    
    	private int fieldX = -1, fieldY = -1, fieldSize = -1;
    	private boolean activeField = true;
    
    	public GuiElementField(Gui parentGui, int fieldX, int fieldY, boolean activeField, int fieldSize) {
    		super(parentGui);
    
    		addMouseListener(this);
    
    		this.fieldX		= fieldX;
    		this.fieldY		= fieldY;
    		this.activeField= activeField;
    		this.fieldSize	= fieldSize;
    
    		this.setBackground(Color.red);
    		/*
    		if (activeField == true){
    			this.setBackground(parentGui.ActiveColor);			
    		}else{
    			this.setBackground(parentGui.InActiveColor);
    		}*/
    
    		initGuiElement();
    	}
    
    	@Override
    	public void initGuiElement() {
    
    		setBorder(new LineBorder(parentGui.BorderColor));
    		this.setPreferredSize(new Dimension(fieldSize, fieldSize));
    		updateGuiElement();
    		setVisible(true);	
    
    	}
    
    	@Override
    	public void updateGuiElement() {
    
    	}
    
    	public void paintComponent(Graphics g){
    
    	}
    
    	@Override
    	public void mouseClicked(MouseEvent arg0) {
    		if (this.activeField == true){
    
    			if (parentGui.player1.getPlayerState() == PlayerState.Active){
    				if (parentGui.playingField.setFieldValue(new Point(fieldX, fieldY), parentGui.player1.getPlayerColor()) == true){
    					parentGui.player1.setPlayerState(PlayerState.InActive);
    					parentGui.player2.setPlayerState(PlayerState.Active);
    
    				}
    			}else{
    				if (parentGui.playingField.setFieldValue(new Point(fieldX, fieldY), parentGui.player2.getPlayerColor()) == true){
    					parentGui.player2.setPlayerState(PlayerState.InActive);
    					parentGui.player1.setPlayerState(PlayerState.Active);
    
    				}
    			}
    
    		}
    
    	}
    
    	@Override
    	public void mouseEntered(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void mouseExited(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void mousePressed(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void mouseReleased(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    
    	}
    }
    


  • Schau dir mal den Unterschied zwischen deinem paintComponent und dem von Sqwan an. Der ist von Bedeutung.



  • was doch so eine zeile ausmacht ;-).
    es klappt. allen vielen vielen dank



  • 🙂 und ich habs dir extra noch mit rein gemacht, weil ich genau da auch mal hing ^^


Anmelden zum Antworten