"Quadrat oder Rechteck" - Check

Scratchy

Mitglied
Hallo,

ich habe es mit eurer Hilfe geschafft, ein Frame zu erzeuge, wo sich ein Viereck mit Tastatureingaben bewegen lässt. Das Problem ist, dass sich das Label, welches anzeigen soll, ob das Viereck ein Quadrat oder Rechteck ist, sich nicht durch ein anderes Label ersetzen lässt ... ???:L

Das hört sich jetzt vielleicht etwas verwirrend an... 😉


Hier ist der Code:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class OwnGraphic extends JPanel implements KeyListener{
	
	private JFrame f;
	private JLabel label;
	private JLabel label1;
	public int a = 100;
	public int b = 100;
	
	public OwnGraphic(){
		f = new JFrame("Bewegung");
		f.setSize(500,500);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.add(this);
		label = new JLabel("Rechteck");
		label1 = new JLabel("Quadrat");
		f.add(label, BorderLayout.SOUTH);
		f.setBackground(Color.orange);
		f.addKeyListener(this);
		f.setVisible(true);
	}
	public void paint(Graphics g){
		g.fillRect(/*a+*/60,/*b+*/60,a+50,b+50);
		
	}
	
	
	
	
	public static void main(String[] args) {
		new OwnGraphic();
	}
	@Override
	public void keyPressed(KeyEvent e) {
		if(e.getKeyCode() == KeyEvent.VK_UP){
			System.out.println("Nach oben bewegen-Taste gedrückt!");
			System.out.println("B-Koordinate:" + b);
			System.out.println("A-Koordinate:" + a);
			up(a, b);
			f.repaint();
		}if(e.getKeyCode() == KeyEvent.VK_DOWN){
			System.out.println("Nach unten-Taste gedrückt!");
			System.out.println("B-Koordinate:" + b);
			System.out.println("A-Koordinate:" + a);
			down(a, b);
			f.repaint();
		}if(e.getKeyCode() == KeyEvent.VK_LEFT){
			System.out.println("Nach links-Taste gedrückt!");
			System.out.println("B-Koordinate:" + b);
			System.out.println("A-Koordinate:" + a);
			left(a, b);
			f.repaint();
		}if(e.getKeyCode() == KeyEvent.VK_RIGHT){
			System.out.println("Nach rechts-Taste gedrückt!");
			System.out.println("B-Koordinate:" + b);
			System.out.println("A-Koordinate:" + a);
			right(a, b);
			f.repaint();
		}
		
	}
	public void up(int a, int b) {
		this.b = b-2;
		if(a == b){
			f.remove(label);
			f.add(label1, BorderLayout.SOUTH);
			f.repaint();
		}if(this.a != this.b){
			f.remove(label1);
			f.add(label, BorderLayout.SOUTH);
			f.repaint();
		}
	}
	public void down(int a, int b) {
		this.b = b+2;
		if(a == b){
			f.remove(label);
			f.add(label1, BorderLayout.SOUTH);
			f.repaint();
		}if(a != b){
			f.remove(label1);
			f.add(label, BorderLayout.SOUTH);
			f.repaint();
		}
	}
	public void left(int a, int b) {
		this.a = a-2;
		if(a == b){
			f.remove(label);
			f.add(label1, BorderLayout.SOUTH);
			f.repaint();
		}if(a != b){
			f.remove(label1);
			f.add(label, BorderLayout.SOUTH);
			f.repaint();
		}
	}
	public void right(int a, int b) {
		this.a = a+2;
		if(a == b){
			f.remove(label);
			f.add(label1, BorderLayout.SOUTH);
			f.repaint();
		}if(a != b){
			f.remove(label1);
			f.add(label, BorderLayout.SOUTH);
			f.repaint();
		}
	}
	
	
	@Override
	public void keyReleased(KeyEvent e) {
		
	}
	@Override
	public void keyTyped(KeyEvent e) {
		
	}
}
 
Hi,

ich verstehe dein Problem nicht direkt, bzw. weiß nicht was du genau machen willst.

Aber ich deute es mal:
Du willst, dass in einem Label "label" ein Text angezeigt wird, ob es ein Rechteck oder ein Qudarat ist.

Warum benutzt du zwei Labels dafür. Du kannst doch einfach

Java:
label.setText("Qudarat")
bzw.
Java:
label.setText("Reckteck")

benutzten.

Somit fällt das remove und add weg!

Gruß
 
Zuletzt bearbeitet:
du kannst den text vom label auch einfach ändern, du brauchst nicht für jeden "Text" ein neues label machen.

Java:
package labelChange;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;

public class ChangeLabelTextDialog extends JDialog
{
	JLabel changeLabel = new JLabel("A");
	
	public ChangeLabelTextDialog()
	{
		// initialize the dialog with a label and a button
		JButton btn = new JButton("Label Ändern");
		btn.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent arg0)
			{
				changeLabelAction();
			}
		});
		
		this.setLayout(new BorderLayout());
		
		this.add(changeLabel, BorderLayout.CENTER);
		this.add(btn, 		  BorderLayout.SOUTH);
		
		this.setSize(new Dimension(100,100));
		this.setVisible(true);
	}
	
	public static void main(String[] args)
	{
		new ChangeLabelTextDialog();
	}
	
	/**
	 * change the label of "changeLabel" variable
	 * from A to B and from B to A
	 */
	private void changeLabelAction()
	{
		if (changeLabel.getText().equals("A"))
		{
			changeLabel.setText("B");
			return;
		}
		
		if (changeLabel.getText().equals("B"))
		{
			changeLabel.setText("A");
			return;
		}
	}
}
 

Zurück
Oben