Java swing heyboard navigation со стандартными нажатиями ОС WindowsJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java swing heyboard navigation со стандартными нажатиями ОС Windows

Сообщение Anonymous »

Есть ли простой способ создать настольное приложение Java Swing Desktop, которое
будет работать в Windows 11 и является судоходным во всех стандартных навигационных клавишах Windows? Это требует навигации без мыши, предпочтительно согласованной с приложениями
стандартных Windows. В этот момент приложение, по -видимому,
отвечает на ALT -клавишу, как и ожидалось, то есть нажатие ALT -ключа, когда
фокус находится в панели содержимого активирует строку меню и перемещает фокус
в первое меню, а Alt Key Press из меню
иерархии уходит в иерархию, как ожидалось. Ключи.
Нажатие клавиши Escape, когда фокус находится в одном из подменерий, не удается, чтобы
вернуть фокус в строку меню. Ключ F10 действует как клавиша ALT, когда
Focus находится в окне документа, как и ожидалось, но когда фокус находится на строке меню
, пресс F10 не деактивирует строку меню.java -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel SpotsView
< /code>
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import java.io.FileWriter;
import java.io.BufferedWriter;

public class SpotsView extends JFrame
{

public class SpotsMenuListener implements MenuListener
{
JMenu menu;

SpotsMenuListener(JMenu menu)
{
this.menu = menu;
}

public void menuSelected(MenuEvent event)
{
menu.getItem(0).doClick(); // click on the submenu
try {
Robot r = new Robot();
r.keyPress(KeyEvent.VK_DOWN);
r.keyRelease(KeyEvent.VK_DOWN);
} catch(Exception e) {}
}

public void menuDeselected(MenuEvent event)
{
menu.setPopupMenuVisible(false);
}

public void menuCanceled(MenuEvent event)
{
}
}

public SpotsView()
{
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
setSize(screenWidth / 2, screenHeight / 2);
setLocationByPlatform(true);
setTitle("untitled");
JMenuBar menuBar = new JMenuBar();
JMenu fieldsMenu = new JMenu("Spots Fields");
JMenu fieldsSubmenu = new JMenu("Spots Fields");
fieldsSubmenu.setLayout(new BoxLayout(fieldsSubmenu,BoxLayout.Y_AXIS));
String[] field_name = {"Date","Time","Frequency","RxTx","Mode","Receive dB",""};
DefaultListModel lm = new DefaultListModel();
for(int i=0; i=0) {
jl.setSelectionInterval(index,index);
selectionModel.setLeadSelectionIndex(index);
jl.clearSelection();
int[] indices = jl.getSelectedIndices();
index = jl.getLeadSelectionIndex();
}
}
});

jl.setPreferredSize(new Dimension(200,350));
jl.setVisibleRowCount(field_name.length);
fieldsSubmenu.add(jl);
JButton clear = new JButton("Clear");
clear.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
jl.clearSelection();
}
});
fieldsSubmenu.add(clear);
JButton cancel = new JButton("Cancel");
cancel.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
fieldsMenu.setPopupMenuVisible(false);
}
});
fieldsSubmenu.add(cancel);
JButton ok = new JButton("Ok");
ok.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
fieldsMenu.setPopupMenuVisible(false);
}
});
fieldsSubmenu.add(ok);
fieldsSubmenu.addMenuListener(new SpotsMenuListener(fieldsMenu));
fieldsMenu.add(fieldsSubmenu);
menuBar.add(fieldsMenu);
JMenu optionsMenu = new JMenu("Options");
JMenu optionsSubmenu = new JMenu("Options");
optionsSubmenu.addMenuListener(new SpotsMenuListener(optionsMenu));
optionsMenu.add(optionsSubmenu);
menuBar.add(optionsMenu);
JMenu countryMenu = new JMenu("Country Watch");
JMenu countrySubmenu = new JMenu("Country Watch");
countrySubmenu.addMenuListener(new SpotsMenuListener(countryMenu));
countryMenu.add(countrySubmenu);
menuBar.add(countryMenu);
JMenu gridMenu = new JMenu("Grid Watch");
JMenu gridSubmenu = new JMenu("Grid Watch");
// gridSubmenu.addMenuListener(new SpotsMenuListener(gridSubmenu));
gridMenu.add(gridSubmenu);
menuBar.add(gridMenu);
JMenu alertsMenu = new JMenu("Alerts");
JMenu alertsSubmenu = new JMenu("Alerts");
// alertsSubmenu.addMenuListener(new SpotsMenuListener(alertsSubmenu));
alertsMenu.add(alertsSubmenu);
menuBar.add(alertsMenu);
JMenu findMenu = new JMenu("Find");
JMenu findSubmenu = new JMenu("Find");
// findSubmenu.addMenuListener(new SpotsMenuListener(findSubmenu));
findMenu.add(findSubmenu);
menuBar.add(findMenu);
JMenu windowMenu = new JMenu("Window");
JMenu windowSubmenu = new JMenu("Window");
// windowSubmenu.addMenuListener(new SpotsMenuListener(windowSubmenu));
windowMenu.add(windowSubmenu);
menuBar.add(windowMenu);
JMenu voiceMenu = new JMenu("Voice");
JMenu voiceSubmenu = new JMenu("Voice");
// voiceSubmenu.addMenuListener(new SpotsMenuListener(voiceSubmenu));
voiceMenu.add(voiceSubmenu);
menuBar.add(voiceMenu);
JMenu helpMenu = new JMenu("Help");
JMenu helpSubmenu = new JMenu("Help");
// helpSubmenu.addMenuListener(new SpotsMenuListener(helpSubmenu));
helpMenu.add(helpSubmenu);
menuBar.add(helpMenu);
setJMenuBar(menuBar);
}

public static void main(String[] args)
{
SwingUtilities.invokeLater(() -> {
SpotsView frame = new SpotsView();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... keystrokes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»