AWT Programm unter Linux anders als unter Windows !

Status
Nicht offen für weitere Antworten.

FinalbrainXP

Aktives Mitglied
Hi, habe ein riesen Problem. Ich muss eine 3D-Engine schreiben und kam auch ganz gut vorran...konnte schon Auflösung und Hertz auswählen und dann in den OpenGL-Modus switchen. Aber das sieht nur unter Windows gut aus. Unter Linux (Suse 9) wird mein Startmenü wieder mal nicht richtig angezeigt. Und zwar arbeite ich nur mit AWT und das "List"-Steuerelement wird hier unter Linux ohne Hintegrund- und Vordergrundfarbe angezeigt. Weiss da jemand wo da mein Fehler liegen könnte, oder unterstützt Linux generell keine Farben bei bei Listboxen ? Bei Checkboxen und anderen Elementen geht es doch auch prima! Wo kann da mein Fehler liegen ?

Hier seht ihr den Unterschied: (Oben Windows unten Linux)


winlinxc0.png



hier die relevanten Codeauszüge:


Code:
public MenuFrame()
{
	super("Unbezeichnet");
  	this.setLayout(null);
  	this.setSize(MenuDimensions.FRAME_WIDTH, MenuDimensions.FRAME_HEIGHT);
	this.setResizable(false);
	this.setBackground(Color.BLUE.darker().darker().darker().darker());
	centerFrame(this);
	
	//...
	//...
	
	list= new MenuList();

	//...
}

Code:
class MenuList extends List
{
    public MenuList()
    {
    	super(4,false);
    	
		this.setForeground(Color.YELLOW.brighter().brighter());
		this.setBackground(Color.BLACK);
	
		this.setBounds(	MenuDimensions.LIST_LEFT_PADDING,
    					MenuDimensions.LIST_TOP_PADDING,
    					MenuDimensions.LIST_WIDTH,
    					MenuDimensions.LIST_HEIGHT);
    	
 	
		this.add("test");
		this.add("test2");
		this.add("test3");
    }
    
    
    public void loggIt(String data)
    {
    	this.add(data);
    }
    
    public void loggClear()
    {
    	this.removeAll();	
    }
}


Das komische ist, das die anderen Steuerelemente sich richtig verhalten 🙁
Hier der Code für das obere Fensterelement mit vertikalem Scrollbalken...da klappt es wunderbarst.

Code:
class MenuConsole extends TextArea
{
    public MenuConsole()
    {
    	super("",0,0, TextArea.SCROLLBARS_VERTICAL_ONLY);
		this.setForeground(Color.YELLOW.brighter().brighter());
		this.setBackground(Color.BLACK);
		this.setEditable(false);
		this.setBounds(MenuDimensions.CONSOLE_LEFT_PADDING,
					   MenuDimensions.CONSOLE_TOP_PADDING,
					   MenuDimensions.CONSOLE_WIDTH,
					   MenuDimensions.CONSOLE_HEIGHT);
    }
    
    public void loggIt(String data)
    {
    	this.append(data);
    }
    
    public void loggClear()
    {
    	this.setText("");	
    }
}


Weiss da jemand Rat ? Das ist ein sehr wichtiges Projekt für mich und muss unter Windows, Linux und Mac einwandfrei laufen. Wichtig ist dabei, das ich kein Swing benutze (Wegen OpenGL etc.)!


Gruss

Final
 
Hallo,
soweit ich das verstanden habe, passt sich AWT dem jeweiligen System Look&Feel an. Das ist dann das Resultat. Alternativ kann man Swing verwenden und da das Standard Look&Feel benutzen.
 
Es wundert mich einfach, das eine einfache "Textarea" mit Hintergrundfarben arbeiten kann und eine "List" aber nicht....nach deiner Theorie mit dem Look&Feel müsste demnach auch die TextArea grau sein, wenn ich dich richtig verstanden habe.....weiss sonst noch jemand woran es liegen könnte ? Wie gesagt, unter Windows läufts ohne mukken...
 
Wie Luma schon schrieb: Wenn du möchtest, dass es überall gleich aussieht und sich gleich verhält, müsstest du Swing verwenden.

cu
 
Swing sollte bei dir übrigens kein Problem sein, da die einige AWT Komponente die du brauchst im Vordergrund liegt.
 
hmm..ja wegen Swing da mache ich mir halt Sorgen, weil das JOGL nicht kompatibel ist mit Swing bzw. ich dann keinen GLCanvas nehmen sollte. Zwar wird in Foren erzählt, dass es keine Probs gibt mit bsp. JFrame und dann nen GLCanvas drauf...aber ich will auf Nummer sicher gehen. Wenn man vorsichtig ist und Swing und AWT mixt, dann sollte es keine Probs geben, habe ich gelesen (Auf Reihenfolgen achten etc.)..aber das ist unsauber und das hier ist meine Dipl. Arbeit..deswegen muss alles stimmen 😉
 
Das ist nicht unsauber. Man muss nur wissen was man tut da Heavyweight Komponenten immer für Lightweight Komponenten liegen. Ansonsten sind Swing und AWT kompatibel.
 
Ich habe bereits eine Lösung...ich erstelle mein Menü 100% in Swing..wenn dann die Engine gestartet werden soll,
wird das Swing-Menu entladen und dann wird in einem reinen AWT Fenster die OpenGL Darstellung vollzogen. So habe ich noch das Menu unabhängig von dem OpenGL Projekt. Aber trotzdem vielen Dank für deine Info. Werde mal bei Gelegenheit genau Nachlesen, wie die Swing und AWT Zeichenroutinen nebeneinander/nacheinander herzeichnen können
und was man genau beachten muss 🙂
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben