Robot Linux

Barbara

Grünschnabel
Hallo!
Ich habe in JAVA unter Windows ein Programm geschrieben, bei dem eine vom Benutzer gedrückte Maustaste automatisch losgelassen wird, wenn das gewählte Element nicht ausgewählt werden darf. Unter Windows hat das auch gut funktioniert.

Wenn ich das gleiche Programm aber unter Linux laufen lassen, dann wird die Maustaste nicht automatisch losgelassen, ich erhalte aber auch keine Fehlermeldung. Ich habe zwar herausgefunden, daß ein Robot unter Linux nur funktioniert, wenn eine XTEST-Umgebung aktiviert ist, aber da ein Robot der Tastenaktionen auslöst bzw. auch Mouseaktionen, wenn ich MousePress und MouseRelease ausführe (zB von einem KeyListener aus), funktionieren, kann das nicht das Problem sein.

Macht Linux einen Unterschied zwischen der aktiv gedrückten Maustaste und der automatisch betätigten? Wie kann ich eine selbst gedrückte Maustaste automatisch loslassen?

Danke für eure Hilfe!

Schöne Grüße
Barbara
 
Warum sperrst du das Element nicht einfach mit setEnabled(false)? Das ist doch ein sehr unschöner Weg auf diese Weise in der Nutzerinteraktion einzugreifen.
 
Es handelt sich dabei um eine JTable. In der werden einzelne Felder vom Benutzer mit Werten belegt (an beliebigen Stellen) und diese Felder dürfen dann nicht mehr verwendet werden. Kann ich diese Zellen dann einzeln auf Enabled(false) setzen?
 
Mit welchem UI-Toolkit programmierst du denn? Mit Swing? Verwendest du einen TableCellEditor um die Felder direkt in der Tabelle zu bearbeiten?
 
Ja, ich arbeite mit Swing.
Im Prinzip repräsentiert mir diese Tabelle ein Array, daß ich im Hintergrund angelegt habe. Das Array besteht aus Elementen einer von mir angelegten Klassen, die mehrere Werte enhält und die Tabelle zeigt einen davon an. Mit einer Eingabe (Enter bzw. Space) wird in dieser Klasse der angezeigte Wert umgestellt und mit einem modifizierten TableCellRenderer werden dann Farben entsprechend der Werte an die einzelnen Zellen vergeben.

Ich habe jetzt versucht dort einmal an einer Stelle bei der Farbvergabe auch noch ein setEnabled(false) zu setzen, aber das ändert nichts daran, daß ich trotzdem über die entsprechenden Felder hinweg markieren kann.
 
Und wie sieht das editieren der Werte nun aus? Oder kann man nur mit Enter/Space den Wert ändern und nicht selber eingeben? Weil wenn du einen eigenen Editor hast kannst du auf der zurückgegebenen Komponente natürlich die Eingabe sperren. Und was hast das mit dem markieren der Zellen zu tun?
 
Man kann die Werte nur über Enter/Space ändern.
Mein Problem ist, daß ich, wenn ich jetzt Zellen markiere, möchte, daß er an diesen markierten Zellen aufhört.
Also wenn ich zB in der 5.Spalte der 4.Zeile den Werte umgeändert habe und ich markiere jetzt mit der Maus Zellen dieser Zeile und fahre über diese 5.Spalte, dann soll er automatisch die für die Markierung gedrückte Maustaste loslassen und das tut der Robot eben nicht. Momentan ist es im gleichgültig, daß hier eine Zelle gesperrt ist und die Zellen ist sowohl links als auch rechts von der gesperrten Zelle markiert.
(Bei der Tabelle ist setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) eingestellt.)
 
Zurück