Wie funktioniert das Feedback eines Klicks auf eine Java GUI

prototype0815

Aktives Mitglied
hey folks,

ich glaube das hier ist wirklich was für die Profis unter euch, ich bin damit total überfragt und habe keine Ahnung in welche Himmelsrichtung ich anfangen soll zu suchen.

Ich habe ein Java Applet das über einen Touchscreen bedient wird, da kommt es hin und wieder vor das man die kleinen Buttons nicht immer ganz trifft mit den dicken Wurstfingern :toll: das kennt sicher jeder von euch...

Buttons vergößern wäre unfug weil die Optik nicht darunter leiden soll.

Jetzt gestaltet sich mein Gedankweg in die Richtung, was passiert eigentlich genau nach einem Klick auf den Screen? was nimmt die geklickten Koordinaten auf und woher weiss es welchem Objekt es diese übergeben muss bzw. sagen muss das es geklickt wurde. Diese Aktion geschieht im Prinzip andauernd, bei Tabs, Buttons, Textfelder, ....usw.

Es passiert zum Beispiel auch bei Tooltip Texten, ohne das man klicken muss. "hover" ich ein Objekt springt sofort der Countdown für den Tooltip an.

Mein Ziel ist es die Koordinaten eines Klicks bzw. der aktuellen Mausposition heraus zu bekommen und dem am nächst gelegenen Objekt (im Umkreis von 5 Pixel evtl.) zu sagen "hey du wurdest angeklickt".

Ich hoffe ich konnte es deutlich genug ausdrücken, falls nicht bitte nachfragen.

LG proto
 
also zum Ziel bin ich damit nicht gekommen. Aber vielen Dank.

Eine weitere Idee die sich mir aufgetan hat ist, das man vielleicht am LightweightDispatcher in den Methoden retargetMouseEvent() oder processMouseEvent() etwas erreichen könnte. Denn soweit ich es verstanden habe nimmt der LightweightDispatcher die Foki an die durch die Maus entstehen (Hover oder Klick).

Zitat:
- The focused component is redundantly stored in both the Window and the
LightweightDispatcher (one of these per heavy weight component).

- When a lightweight component requests the focus, this request is
propagated to the nearest LightweightDispatcher above the lightweight
component via Container.proxyRequestFocus().


Vielleicht kennt sich ja einer von euch damit aus, um es nochmal zu verdeutlichen, ich möchte gerne die "hit area" oder "clickable area" meiner Buttons, TextFields, ComboBoxes,.... vergrößern. Ohne die size() der Objekte zu verändern. Damit man disese mit dem Finger auf einem Touchscreen besser trifft.

LG
 
Warum änderst du nicht das Button Layout so das es einen transparent Bereich um den Knopf herum hat. Das ist deutlich einfacher

Gruß

Claus
 
Ich brauche diese Lösung ja leider für sämtliche Elemente die man anklicken/auswählen kann. Aber es wäre ein Anfang, ich habe versucht einen emptyBorder um die Buttons herum zu plazieren aber dieser hat die size() meiner Buttons verändert.

Welche Art schwebt dir denn vor?
 
Ich weiß ja nicht wie deine buttons aussehen. Ich dachte du machst einfach einen ImageButton dessen Image eben einen Transparent Bereich um den eigentlich Button herum hat. Natürlich werden die Buttons dann größer aber man sieht es eben nicht.
 
Die Idee mit dem ImageButton ist mir auch schon gekommen, aber wie soll ich dann einen Transparenten Bereich drum herum machen? Könnte es funktionieren wenn das Image das ich auf den Button lege einen Rahmen mit alpha-Kanal (transparenz) hat? Aber wie bekomme ich dann die verschiedenen Texte auf die Buttons?
 
Ja genau Du nimmst einfach ein PNG Image mit Alpha-Kanal. Was Di mit Texten meinst ist mir nicht klar. Die kannst Du doch mit in das Image malen oder nicht?
 
Aus der Diskussion kann ich leider nicht entnehmen, welche Technologie (AWT, SWT, JavaFX) verwendet wird. Wäre zumindest einfacher eine Lösung zu finden. In AWT und JavaFX bin ich öfters über Methoden gestolpert, welche UI-Elemente unter Angabe der Koordinaten lokalisieren.

Zu deiner Lösung: 100% transparente Bereiche werden i.d.R. ignoriert. Somit solltest den zusätzlichen Bereich nur 99% transparent machen. Evtl. war das auch der Fehler mit dem Border, wobei ich das nicht ausprobiert habe und damit nicht sagen kann, ob es prinzipell funktionieren würde.
 
in Swing kann man doch ein JPanel mit GridLayout erstellen,
HGap und VGap entsprechend setzen, und darein die JButtons "pflanzen"
Außerdem kann man bei den JButtons noch mit setMargin
den Abstand zwischen Schrift und Button-Rand setzen.
Damit sind doch viele Gestaltungen möglich..

Auch bei JTable kann man was "für die Finger tun",also den Abstand zwischen Schrift und Grid vergrößern :
google mal nach BoardTableCellRenderer
 

Zurück
Oben