how to detect if a users keyboard is in AZERTY in Java? - java

There is currently a bug in JavaFX (https://javafx-jira.kenai.com/browse/RT-30669, free registration required) which makes it so that if you are using an azerty keyboard layout and specify an accelerator with Z in it, on Mac it only fires when typing a W. I need to work around this bug as I need to release my product now.
So I'd like to detect Mac+Azerty and if so change the accelerator to using W. I know how to detect Mac, and I know how to detect the keyboard's locale (using InputContext#getLocale()) but how do I know if the current locale has an azerty keyboard layout? Do I have to check against a hardcoded list of known locales which use an azerty layout? If so, where would I find such a list?

Just don't "check against a hardcoded list of known locales" as many people may have a french locale with a keyboard that does not matches the locale, if they bought their computer in the US and use it in quebec with a french interface. I am personally worst, as I'm having a dvorak layout... ;-) And I just want to imagine how many variants of spanish-based layout there may be available...
My best and more portable advice would be to not try to detect something that is hardly detectable, but give some "default" keyboard mappings for (e.g.) qwerty keyboards that would work for most of your userbase, and create a configuration panel that enables your user to change the key mapping for your application by typing the new keys, if they don't like the defaults.
edit:
ah... that can be indeed a different problem... maybe you could anyway make a combobox preference for all non-us keyboard on macosx that has keys with a modifier that get changed?
To answer your question more "straightforwardly", here are a few results I found on google:
http://www.coderanch.com/t/412482/java/java/Finding-language-setting-locale-keyboard
http://www.java-gaming.org/index.php/topic,23501.
both lead towards java.awt.im.InputContext:
InputContext context = InputContext.getInstance();
System.out.println(context.getLocale().toString());
I never tried this in java, so I can't help you more than with my google-fu, but I really hope this helps :-)

Related

Detect if user is using ANSI or ISO keyboard button layout

I'm currently working on a custom key binding mod for Minecraft. Although irrelevant, it gives some context. I'm planning to show a UI with all the buttons on their keyboard where they can click to assign macros to said key, although I don't want to be biased towards one particular keyboard button layout.
Looking at a website called switchandclick they show the differences between ISO and ANSI. ISO which I'm using has a key between left shift and Z, as well as having the return/enter key 2 keys tall rather than 1, with the missing key moved above right shift.
Here is the image from said site:
However, even if ISO is the layout used in Sweden where I live, I'm aware some users may be from different parts of the world, and ANSI is probably more common in America, so I don't want to show an ISO keyboard for ANSI users and vice versa.
I've looked around at various sources, but all I can find when looking for a solution is websites showing the differences between the layouts, rather than showing how to detect them.
So how would I go about detecting if the user has an ANSI or ISO keyboard? Pure Java is preferred but LWJGL 3 is the graphics api in use if that helps with finding a solution. I'm also running Java 17 in case that makes it easier.
As mentioned by #Abra in a comment to the question, there's no way to do that programmatically as there's no protocol between the keyboard controller and the keyboard driver that helps distinguish the layout of the keyboard.
Only option here is to either guess/predict the layout, let the user choose the layout, or simply use the same layout assumed by Windows in osk.exe.
Original answer on this post

Android : How to programmatically open the soft keyboard in Emoji View

As I see, a way to show default emojis on android is by using the following on an input text.
android:inputType="textMultiLine|textShortMessage"
When I search, I can't find a way to do this through Java. What I want to make happen is that when the soft keyboard is open, have the user tab a button to switch between emoji view and normal keyboard view.
Custom Emoji Keyboard.
I've already implemented this, but it would be much better to and lighter to use Emojis already on the device for post kik-kat.
Google does switch between this views.
On Google Allo, pressing the emoji icon inside the editText switch views.
TextView
Using TextView's input type does not contain what you want...
Keyboards
Seems you can show the user a list of available keyboards. (the ones that are available on that device)
And with that, see if it has an Emoji Key Board available. But needs at least Android 4.1 it seems.
Force Part of Key Board
Not possible as far as I can see. You can disable them, it seems.
*I would love to show how to do this, it looks like a neat thing to be able to do. But my google-fu does not show anything close :(
After trying for a while I didn't achieved this goal even injecting a keyevent.
Looking in Google Allo, that looks as a custom implementation. I have switftkey themed keyboard and on KitKat Moto G (1st gen) it's very remarkeable. I tested also on a Marshmallow Moto G (2nd gen) with native keyboard, but contracted, and you can see that isn't the real soft keyboard :
I think there is no way to achieve this without a custom emoji's implementation.
Maybe this will help you:
https://blog.swiftkey.com/tech-blog-android-input-method-subtypes/
There is something like an Emoji Subtype as you can see following the link below.
public static RichInputMethodSubtype getEmojiSubtype()
https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java

Working in java image

I will explain my question clearly.
I need to zoom in/zoom out the world map.
When I click on the particular country in map, control should redirected to new page with respective the country.
I dont have any idea about this in java. Please explain the steps to acheive the above task.
As the question is quite general, here is a general answer: Zooming often means, that you want to display a certain percentage of somethin, and not the whole, where your size of the displayed will not change.
But in your case it seems more like a "find a mouse click in a polygon" thing. So you have to add a selection/click listener to whatever widgets you use (Swt? swing? ....?) where you change what your program renders.
It sounds like you may be trying to reinvent the wheel. Google etc have already solved this problem rather well. It might be better to incorporate an existing solution into your application. Have a look at GoogleEarth inside Java Swing.

Why is my keyboard messed up in Eclipse?

I am trying to type in a pair of angle brackets in Eclipse, like "<>". However it shows up as a single quotation and a dot, like "'.". I tried a couple of times and found out that the angle bracket is actually located at back-slash's position.
Why is this happening? How can I change it back?
Thanks in advance.
Xi
I think this has to do with an annoying feature of Windows - I've had something similar for a long time in different programs (not just Eclipse).
If you have a non-English version of Windows, you probably have different keyboard layouts installed (for example, I have a Dutch and a US English layout installed by default). The key combination Alt + Shift switches between keyboard layouts. It's very annoying and it's a really strange feature - as if the keys on someone's keyboard would suddenly change?!
You can go into Control Panel, Keyboard Settings and remove the layouts that you don't want to use. (I removed the Dutch layout so there's only US English left), so that you can't switch to the wrong layout by accident again. Or you can go to the Advanced Key Settings in Keyboard Setting and turn off the key combination.
Hit Alt + Shift. If you don't want to spend time removing keyboard layouts like Jesper suggested, just hit Alt + Shift until you get the layout you need. It usually doesn't take more than a couple times. :)
I Am Doing This Via Windows Control Panel.
First time when changing font.I am restart Eclipse.(No solution than that to save my time) and then do this.
In windows 7 the language bar uses the LEFT ALT + SHIFT key sequence to change languages, so you can quickly change the language say to Spanish when writing a mail.
This sequence conflicts with many Eclipse shortcuts that use ALT + SHIFT, like rename!
You can remove the OS's setting by control panel > keyboards and languages > change keyboards > advanced key settings.
Julio
... Maybe you have your keyboard set for a different Locale(country)?
Also, you would probably be better asking this on SuperUser
Actually i think this must be something with Java SDK, because im having the same problem with IntelliJ. For example, in
public class MainActivity extends Activity {
/**
* Called when the activity is first created.
*/
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView iv
}
}
when i try to complete this snippet, with
ImageView iv = (ImageView) findViewById(R.id.iv_imagem);
after "iv" the character set in my keyboard is screwed, and instead of a QWERTY keyboard (i have portuguese language defined, and dont have other keyboards in control pannel) i have a AZERTY
in windows, other applications are is still normal
I had the same problem. I was editing Java code in Eclipse and the keyboard layout suddenly changed. On my windows taskbar I have a keyboard icon and I used it to change the keyboard layout between United States-International and Dutch. That did not solve my problem. My problem was solved when I had restarted Eclipse.
Keyboard handling of Eclipse is not perfect indeed: it confuses ctrl-alt with "altgr"!
So for example with Hungarian keyboard layout you cannot enter character '&', as it requires pressing altgr-C - but ctrl-alt-C was set to "SVN commit" by default...
(of course no problem in un-binding that combination in Eclipe, but it was not straightforward that ctr-alt conflicts with altgr, so what to look for)
I guess this probably happens if your script in Eclipse uses Robot class or any statements that use the combination of the keys, ALT+SHIFT OR CTRL+SHIFT. These combinations mess up with the functions of other keys after your script execution is completed or if it is stopped in between.
If you want to confirm if any of these combination is really messing up with your keys, then in your testng.xml file, just mouseover on any class name and it will be highlighted and underlined automatically, even though we have not pressed ALT nor SHIFT at this moment. It means that these keys are not released yet even though your script might have released them.
If you face this problem, then the control being in Eclipse, press CTRL+SHIFT and press ALT+SHIFT, and this resolves the above problem. Now, the keys in your keyboard work as usual.
with me, the strange thing is outside of eclipse (i use the ADT package), everything is ok. And restarting workspace, fixes the problem
this happens when i type any expression that might not be valid, like when i try to write
taskNameEditText = (EditText)findVie
of course, i want to write
taskNameEditText = (EditText)findViewById(R.id.task_name);
but after the first snippet, it changes the keyboard. And the code completion stops working too. So far the only working solutions i found where: 1 - restarting eclipse, 2 - start using IntelliJ
changing the key bindings wont work, just because i already have those unset. Also, "Alt + Shift" wont work, because this is not a windows (i use 7, 64 bits) problem

How do I add spell checking to a JTextArea?

I have a small Java application that has a JTextArea where the user enters text. I would like to add spell checking capabilities to this component similar to the way that Microsoft Word does it, i.e. misspelled words are underlined and a popup menu with corrections is displayed when the user right clicks on the underlined word. Are there any open source libraries for adding this functionality to JTextAreas?
You could implement your own spell checker using a dictionary (can get quite large depending on languages you support), then distance metrics are calculated from the words in the text box to the dictionary. Underlining can be done using font styling, there as applet based sample here.
Jaspell is a Java implementation of the popular Aspell. In there are some explantions of the search algorithms used.
As mentioned previously Jazzy is also great and IBM provides a nice tutorial.
I haven't tried this before, but I came across it a little while ago: http://sourceforge.net/projects/jazzy/

Categories

Resources