keine Ahnung wie ich den Fehler nennen soll

Status
Nicht offen für weitere Antworten.

redneb

Mitglied
Hallo,

also ich weis nicht so genau wie ich euch den Fehler beschreiben soll.

Ich beschreibe erst ein mal wie der Aufbau des Prgramms ist.

Auf dem JFrame (Klasse A) liegt mit add() eine Klasse X die von JPanel erbt , diese Klasse besitzt ein JLabel hat auf
dem das Hintergrundbild liegt. Zu der Klasse X kommt eine Klasse Y hinzu die ebenfalls mit mit add() der Klasse X
hinzu gefügt wird. Die Klasse Y ist ein JPanel auf dem sich 2 Buttons befinden.

Die Klasse A implementiert den KeyListener, wenn eine Taste gedrückt wird, wird aus der Klasse Y ein Methode
Aufgerufen die die Buttons hoch bzw. runter bewegt. Die Klasse funktioniert in dem mit .setLocation(x,y) die position
um einen Pixel pro 5ms verschoben wird.

Und dann beginnt der Fehler...

Beim Start des Programms sieht alles normal aus, jedoch wenn die Buttons bewegt werden, sieht man dann das
JPanel der Klasse Y. Ich habe auch schon versucht mit setOpaque( false ) das JPanel zu "verstecken", jedoch
verschwinden dann die Buttons bei der ersten Bewegung.


Da ich nicht weis wo der Fehler liegen könnte (wahrscheinlich vor dem PC) post ich auch grad mal
die Klassen





Klasse Y

Code:
import java.awt.Dimension;
import javax.swing.JPanel;

public class EinfachesMenue extends JPanel
{
	private boolean isRunning = false;
	private GButton buttons[];
	private int zwischenraum = 0;
	private int vorschub = 40;
	
	public int aktiverButton;
	public int letzterButton;
	
	
	
	public EinfachesMenue( Dimension d, String buttonTexte[] )
	{
		super();
		this.setLayout( null );
		this.setSize( 300, 200 );
		this.setLocation( ( d.width - this.getSize().width ) / 2, ( d.height - this.getSize().height ) / 2 );
		this.setDoubleBuffered( true );
		this.setVisible( true );
		
		this.erstelleButtons( buttonTexte );
		
		this.setOpaque( true );		
		this.repaint();
	}
	
	

	public void erstelleButtons( String buttonTexte[] )
	{
		buttons = new GButton[buttonTexte.length];
		
		for( int i = 0; i < buttonTexte.length; i++)
		{
			buttons[i] = new GButton(  buttonTexte[i], i );
			
			buttons[i].setOpaque( true );
			buttons[i].setLocation( (this.getSize().width - buttons[i].getSize().width) / 2, 0 );
		
			this.zwischenraum = (( this.getSize().height - ((buttons.length+1)*buttons[0].getSize().height) ) / buttons.length );
			int pos = (zwischenraum + buttons[i].getSize().height) * (i+1);
			
			if( i == 0 )
				buttons[i].setLocation( buttons[i].getLocation().x + this.vorschub, pos );
			else
				buttons[i].setLocation( buttons[i].getLocation().x, pos );
			
			this.add( buttons[i] );
		}

		this.aktiverButton = 0;
		this.letzterButton = ( buttons.length - 1 );
	}
	
	
	
	
	synchronized boolean getIsRunning()
	{
		return this.isRunning;
	}
	
	synchronized void setIsRunning( boolean b )
	{
		this.isRunning = b;
	}
	
	
	
	
	synchronized void moveUp()
	{
		if( this.aktiverButton <= 0 )
			return;
		
		int bewegungsLaenge = this.zwischenraum + this.buttons[0].getSize().height;
		
		for( int i = 0; i < bewegungsLaenge; i++ )
		{
			try{ Thread.sleep( 5 ); } catch( Exception e ) {}
			
			for( int x = 0; x <= (buttons.length-1); x++ )
			{
				buttons[x].setLocation( buttons[x].getX(), buttons[x].getY() + 1 );
				buttons[x].repaint();
			}
			
			if( i > ( bewegungsLaenge - this.vorschub ) )
			{
				buttons[this.aktiverButton].setLocation( buttons[this.aktiverButton].getX() - 1, buttons[this.aktiverButton].getY() );
				buttons[this.aktiverButton-1].setLocation( buttons[this.aktiverButton-1].getX() + 1, buttons[this.aktiverButton-1].getY() );
			}
			
			this.repaint();
		}
		this.aktiverButton--;
	}
	
	

	synchronized void moveDown()
	{
		if( this.aktiverButton >= this.letzterButton )
			return;
		
		int bewegungsLaenge = this.zwischenraum + this.buttons[0].getSize().height;
		
		for( int i = 0; i < bewegungsLaenge; i++ )
		{
			try{ Thread.sleep( 5 ); } catch( Exception e ) {}
			
			for( int x = 0; x <= (buttons.length-1); x++ )
			{
				buttons[x].setLocation( buttons[x].getX(), buttons[x].getY() - 1 );
			}
			
			if( i > ( bewegungsLaenge - this.vorschub ) )
			{
				buttons[this.aktiverButton].setLocation( buttons[this.aktiverButton].getX() - 1, buttons[this.aktiverButton].getY() );
				buttons[this.aktiverButton+1].setLocation( buttons[this.aktiverButton+1].getX() + 1, buttons[this.aktiverButton+1].getY() );
			}
			this.repaint();
		}
		this.aktiverButton++;		
	}
	
	
	
	
}



Klasse X

Code:
import java.awt.Dimension;
import java.awt.Image;
import java.io.File;

import javax.swing.*;

public class Fenster extends JPanel 
{
	private String fensterID;
	private ImageIcon hintergrundBild;
	private JLabel hintergrundLabel;
	private String fileSource;
	private Boolean changeBild = false;

	public Fenster( Dimension d )
	{
		super();
		
//		Das Layout null setzen für eine freie Platzierung der Fensterelemente
		this.setLayout( null );
		
//		Die Größe des JPanels der Größe des Fensters anpassen
		this.setSize( d );
		
//		Das JPanel durchsichtig machen
		this.setOpaque( false );
		
//		Doppelt gebuffert für eine bessere Darstellung bei zB. der Bewegung des Menüs		
		this.setDoubleBuffered( true );

		
		
//		Das Hintergrundbild dem JPanel zuweisen
		hintergrundLabel = new JLabel();
		hintergrundLabel.setSize( d );
		hintergrundLabel.setLocation( 0, 0 );
		hintergrundLabel.setDoubleBuffered( true );
		hintergrundLabel.setVisible( true );
		
		
		
//		Hintergrundbild entsprechend der Fenstergröße auswählen		
		if( d == IIMosPlayerBox.DIMENSION_SMALL )
			fileSource = "src/BG_848x480.jpg";
		
		if( d == IIMosPlayerBox.DIMENSION_BIG )
			fileSource = "src/BG_1280x768.jpg";
		
		if( d == IIMosPlayerBox.DIMENSION_FULL )
		{
			if( d.height > IIMosPlayerBox.DIMENSION_BIG.height && d.width > IIMosPlayerBox.DIMENSION_BIG.width )
				fileSource = "src/BG_1280x768.jpg";
			else
				fileSource = "src/BG_848x480.jpg";

			this.changeBild = true;
		}

		
//		Bilddatei auf vorhandenheit püfen und bei Erfolg 
// 		Bild laden und dem Label hinzufügen		
		File bildQuelle = new File( fileSource );
		if( bildQuelle.exists() )
		{
			hintergrundBild = new ImageIcon( fileSource );

			// Wenn die Bildschirmgröße nicht einem der 2 Standartgrößen
			// entspricht wird das Bild der Größe angepasst
			if( this.changeBild )
			{
				hintergrundBild.setImage( hintergrundBild.getImage().getScaledInstance( d.width, d.height, Image.SCALE_SMOOTH ) );
				this.changeBild = false;
			}
			
			hintergrundLabel.setIcon( hintergrundBild );
			this.add( hintergrundLabel );
		}
		else
			Logger.getInstance().log( "Datei "+ fileSource +" konnte nicht gefunden werden", 1);

		
		this.setVisible( true );
	}
	
	
	
	
	public String getFensterID()
	{
		return this.fensterID;
	}
	
	public void setFensterID( String fid )
	{
		this.fensterID = fid;
	}
	

}



und noch die Klasse A

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;



public class FensterKontrolle extends JFrame implements KeyListener 
{
	private String aktivesFenster;	// Fenster ID des aktuell angezeigten Fensters. Ermöglicht die Navigation zwischen den Fenstern
	private Dimension dimension;
	
	private F_Hauptmenue hauptmenue;
	
	
	/* Konstruktor */
	public FensterKontrolle( Dimension d )
	{
//		Konstruktor-Aufruf des JFrame
		super(IIMosPlayerBox.BOX_NAME + ", Box ID: " + IIMosPlayerBox.BOXINFOS.BOX_ID);	
		this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		
//		Die Größe des Fensters wird fest gesetzt
		this.setSize( d );
		
// 		Menüleiste und die Rahmen werden entfernt wenn diese vorhanden sind
		if( this.isUndecorated() == false )
			this.setUndecorated( true );
		
//		Das Fenster wird in der Mitte des Bildschirms platziert
		Dimension bildschirmSize = Toolkit.getDefaultToolkit().getScreenSize();
		this.setLocation( ( bildschirmSize.width - this.getSize().width ) / 2,
						  ( bildschirmSize.height - this.getSize().height ) / 2 );
		
//		Das Fenster wird fokusierbar gemacht und wird automatisch fokusiert.
//		Dies ist notwendig für den KeyListener, ohne Fokus auf dieses 
//		Fenster ist der KeyListener der Fensterkontrolle inaktiv
		this.setFocusable( true );

//		Der KeyListener wird dem Fenster hinzugefügt und aktiviert
		this.addKeyListener( this );
		
//		Das Fenster sichtbar machen
		this.setVisible( true );
		
		this.dimension = d;
		

		
//  	System.out.println( getClass() );
		
		
		hauptmenue = new F_Hauptmenue( d );
		
		hauptmenue.repaint();
		this.add( hauptmenue );
		
		this.aktivesFenster = hauptmenue.getFensterID();

		
		this.repaint();
	}







	public void keyPressed(KeyEvent ev) 
	{
		if( this.aktivesFenster.equals("H001") )
		{
			
			if( hauptmenue.menue.getIsRunning() == false )
			{
				// Tastendruck U
				if( ev.getKeyCode() == KeyEvent.VK_U )
				{
					Thread myThread = new Thread()
					{
						public void run()
						{
							hauptmenue.menue.setIsRunning( true );
							hauptmenue.menue.moveUp();
							hauptmenue.menue.setIsRunning( false );
						}
					};
					myThread.setPriority( Thread.MAX_PRIORITY );
					myThread.start();
				}
				
				// Tastendruck D
				if( ev.getKeyCode() == KeyEvent.VK_D )
				{
					Thread myThread = new Thread()
					{
						public void run()
						{
							hauptmenue.menue.setIsRunning( true );
							hauptmenue.menue.moveDown();
							hauptmenue.menue.setIsRunning( false );
						}
					};
					myThread.setPriority( Thread.MAX_PRIORITY );
					myThread.start();
				}				
				
				
			}
		}// ENDE H001
		
		
		
	}

	
	// Methoden werden nicht ind diesem Prohramm genutzt.
	// Der KeyListener erwartet jedoch die implementierung
	// der Methoden
	public void keyTyped(KeyEvent arg0) { }
	public void keyReleased(KeyEvent arg0) { }

	
}





oje... also ich hoff mal ihrgend Jemand hat in etwa verstanden was ich will^^
Sitze schon seit heute morgen um 9 da und versuche den Fehler zu beseitigen, bin mit den Nerfen ein wenig am Ende.
Und verdammt schül isses auch noch.
 

m@nu

Bekanntes Mitglied
hm, seh ich das richtig: du willst grundsätzlich einfach deine buttons per tastatur verschieben können?

falls ja, würde das ganze per GlassPane einfacher funktionieren.

Code:
public class KeyGlassPane extends JComponent implements KeyListener {
  //hier deinen KeyListener implementieren
}

Code:
deinFrame.setGlassPane(new KeyGlassPane());

die glasspane legt sich an (fast) oberster stelle über dein frame und erhält somit immer auch alle keyevents welche "rumfliegen" :)

hoffe das konnte helfen.
 

redneb

Mitglied
ui danke für die schnelle Antwort.

Hört sich interessant an, werd das gleich aus probieren. Habe mal in einem anderem Post nach dem GlassPane gefragt, da wurde mir gesagt ich soll setOpaque( false ) am besten benutzen.


Also ich möchte auf Tastendruck die Buttons bewegen können und gegebenenfalls auch zwischen den einzelnen Fenstern hin und her springen können. Dies realisiert die Klasse A (FensterKontrolle).
Die Klasse A beinhaltet später dann mehrere Klassen wie Klasse Y mit Menüs (Buttons)



Es geht halt darum dass das JPanel mit den Buttons sicht bar wird.
 

redneb

Mitglied
Juchhu!!! habs hin bekommen!!! :lol:

die Lösung war setComponentZOrder(Component, int)


ist erst am Java 5.0 verfügbar
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
1 JFrame bleibt leer, keine Ahnung warum AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation JMenu, setMnemonic(Char k) bringt keine Wirkung AWT, Swing, JavaFX & SWT 8
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
S JavaFX WebView zeigt keine Animation AWT, Swing, JavaFX & SWT 5
ruutaiokwu SWT "Google Window Builder" tut keine jar's ins Projekt rein bei SWT-Projekt AWT, Swing, JavaFX & SWT 22
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
G JTree +/- verschwidet wenn Knoten keine Kinder hat... AWT, Swing, JavaFX & SWT 6
S java.fxml.load.exception und keine automatische Aktualliseriung der Mainausgabe AWT, Swing, JavaFX & SWT 5
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
D Swing Warum erhalte ich keine Ausgabe? Funktioniert der equals-vergleich in actionPeformed nicht richtig? AWT, Swing, JavaFX & SWT 3
K Swing Keine Reaktion auf Tastatureingaben bei mehreren Buttons??? AWT, Swing, JavaFX & SWT 4
gamebreiti auf usereingabe warten mit GUI(nur Labels, Buttons etc. keine Texteingaben) AWT, Swing, JavaFX & SWT 3
P Swing JTable keine Markierung nach Button klick AWT, Swing, JavaFX & SWT 0
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
H RCP(SWT) Browser-Widget zeigt keine locale HTML-Dateien an AWT, Swing, JavaFX & SWT 1
N JavaFX Keine Dynamic AWT, Swing, JavaFX & SWT 2
W Swing Ausführung einer .jar zeigt keine Reaktion AWT, Swing, JavaFX & SWT 4
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
N Swing JTable mit Sorter: Keine Sortierung bei Klick in Header AWT, Swing, JavaFX & SWT 3
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
A trotz setSize keine breite AWT, Swing, JavaFX & SWT 4
Q JTable - Keine Spaltennamen AWT, Swing, JavaFX & SWT 3
H Swing Keine Rückmeldung (freeze) bei setVisible(false) oder dispose() AWT, Swing, JavaFX & SWT 4
B JEditorPane lädt keine Schriftfarbe in HTML AWT, Swing, JavaFX & SWT 2
dzim TableView - keine Aktualisierung geänderter Items AWT, Swing, JavaFX & SWT 5
E Keine Ausgabe auf Console und List AWT, Swing, JavaFX & SWT 13
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 2
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 3
N Swing Netbeans 7.1 keine DesktopApplication mehr möglich ? AWT, Swing, JavaFX & SWT 15
H JTable zeigt keine Daten an AWT, Swing, JavaFX & SWT 5
C Swing JFrame nimmt keine anderen Elemente auf AWT, Swing, JavaFX & SWT 13
K Applet Wieso kann ich keine Array im Applet initialisieren AWT, Swing, JavaFX & SWT 13
A Swing JTable benutzt keine Checkbox für Booleans AWT, Swing, JavaFX & SWT 9
M Swing Focus für Buttons deaktiviert --> keine Reaktion mehr auf Tastendrücke AWT, Swing, JavaFX & SWT 5
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
C MouseMotionListener fired keine Events mehr wenn in Button AWT, Swing, JavaFX & SWT 2
D Fenster will keine Ausgabe geben>:( AWT, Swing, JavaFX & SWT 3
K Applet erkennt keine Frameverkleinerung AWT, Swing, JavaFX & SWT 5
O keine ähnliche Farben durch Random in Java AWT, Swing, JavaFX & SWT 21
N JFileChooser - Keine Funtkion AWT, Swing, JavaFX & SWT 13
P Kennt awt.list keine Tastatureingabe? AWT, Swing, JavaFX & SWT 3
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
H Swing JScrollPane bekommt keine ScrollBars AWT, Swing, JavaFX & SWT 5
bluerob Nach RowSorter -> Keine Tabellenüberschreibung möglich AWT, Swing, JavaFX & SWT 7
V JTextField nimmt keine Eingaben an, nach nachträglichem setVisible des JWindows AWT, Swing, JavaFX & SWT 4
aze JTextField:Keine Markierung AWT, Swing, JavaFX & SWT 6
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
Fu3L Keine Transparenten JTextComponents möglich mit Nimbus L&F? AWT, Swing, JavaFX & SWT 5
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
earlgrey_tea AWT KeyListener bekommt keine Signale AWT, Swing, JavaFX & SWT 3
B LayoutManager mischen keine gute Idee? AWT, Swing, JavaFX & SWT 9
O Swing es können keine neuen Labels hinzufügt werden während der Timer läuft AWT, Swing, JavaFX & SWT 14
B JScrollbarPane zeigt keine scrollbars AWT, Swing, JavaFX & SWT 2
I Panel scheint keine Größe zu haben AWT, Swing, JavaFX & SWT 3
aze GridLayout: Keine automatische Ausdehnung AWT, Swing, JavaFX & SWT 2
M SWT keine Scrollbar bei widgets.List und GridLayout AWT, Swing, JavaFX & SWT 2
P SWT Tree - Keine Selection zulassen AWT, Swing, JavaFX & SWT 4
T SWT Keine Anzeige der Widgets nach Comboauswahl AWT, Swing, JavaFX & SWT 2
1 GeneralPath-Kreise werden keine Kreise AWT, Swing, JavaFX & SWT 2
hdi Swing setPreferredSize zeigt keine Änderung AWT, Swing, JavaFX & SWT 2
R AWT [Anfänger] keine atives Aussehen von Buttons AWT, Swing, JavaFX & SWT 4
S Seltsames Problem - manchmal enthaelt die ActionMap eine JTextArea keine Actions. AWT, Swing, JavaFX & SWT 4
A SWT Table hat keine Scrollbar AWT, Swing, JavaFX & SWT 12
B Keine Änderungen an JLabel durch Array möglich AWT, Swing, JavaFX & SWT 12
C Frame repaint hat keine Wirkung AWT, Swing, JavaFX & SWT 6
L Swing JPanel sendet keine KeyEvents AWT, Swing, JavaFX & SWT 22
J Swing - ich sehe keine Linie, andere schon AWT, Swing, JavaFX & SWT 6
S JDialog gibt keine Nachrichten ueber sein Schliessen..? AWT, Swing, JavaFX & SWT 3
C JTextArea zeigt keine Scrollbalken AWT, Swing, JavaFX & SWT 18
B Heavyweight Popup lässt keine MouseEvents durch AWT, Swing, JavaFX & SWT 2
K JDialog zeigt keine Komponenten wenn es modal ist AWT, Swing, JavaFX & SWT 2
S Seltsam: SWT Table zeigt keine Scrollbar an AWT, Swing, JavaFX & SWT 12
V JTabbedPane - keine "Focus"-Box auf selektiertem T AWT, Swing, JavaFX & SWT 2
G JTable zeigt keine Spaltenheader AWT, Swing, JavaFX & SWT 7
L JDialog-kann keine Größe setzen AWT, Swing, JavaFX & SWT 4
F Thread macht keine Pause AWT, Swing, JavaFX & SWT 22
W Threads und trotzdem keine Nebenläufigkeit AWT, Swing, JavaFX & SWT 13
G Keine Anzeige des Balkens AWT, Swing, JavaFX & SWT 3
F JScrollPane mit JPanel drinne zeigt keine Scroll-Leisten AWT, Swing, JavaFX & SWT 7
K keine Zeichenfläche sichtbar AWT, Swing, JavaFX & SWT 2
J ActionListener nimmt keine for()-Schleife? AWT, Swing, JavaFX & SWT 4
M JDialog + JFrame + keine Java Tasse AWT, Swing, JavaFX & SWT 9
G keine ScaledInstance von BufferedImage? AWT, Swing, JavaFX & SWT 6
Z habe code, habe fehler, habe keine lösung AWT, Swing, JavaFX & SWT 7
C Jar Datei ist ausführbar aber zeigt keine icon's an AWT, Swing, JavaFX & SWT 18
S JList gibt nach Sortierung mit Collections keine Anzahl mehr AWT, Swing, JavaFX & SWT 3
N Trotz richtiger ListSelectionMode kann ich keine Zeile sel? AWT, Swing, JavaFX & SWT 4
technolion FileDialog/keine Multi-Selektion vs. JFileCHooser/kein LaF AWT, Swing, JavaFX & SWT 2
S getSize gibt keine Größe wieder AWT, Swing, JavaFX & SWT 4
K Keine SWT-Komponenten-Gruppe in Palette des Visual Editor AWT, Swing, JavaFX & SWT 2
M Keine Buttons oder sonstige Objekte in JFrame unter Linux AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben