Car*_*nal 4 java keyboard user-interface swing jbutton
我做了一个JButton代表卡片的阵列,其中有16个,4个4个.如何JButton在键盘上用箭头而不是鼠标浏览,如何JButton通过按ENTER而不是"点击" mouseclicking?也许还有另一种方法可以做到这一点,而不是使用JButtons?
最好的祝福!
我创建了一个解决方案,允许您使用箭头键导航按钮并使用空格激活它们并输入.
以下是所有代码.没有提供任何评论,如果您有任何疑问,请告诉我.
import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ButtonPane extends JPanel {
private JButton[][] buttons;
public ButtonPane(int row, int col) {
super(new GridLayout(row, col));
buttons = new JButton[row][col];
for (int i = 0; i < buttons.length; i++) {
for (int j = 0; j < buttons[i].length; j++) {
final int curRow = i;
final int curCol = j;
buttons[i][j] = new JButton(i + ", " + j);
buttons[i][j].addKeyListener(enter);
buttons[i][j].addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
if (curRow > 0)
buttons[curRow - 1][curCol].requestFocus();
break;
case KeyEvent.VK_DOWN:
if (curRow < buttons.length - 1)
buttons[curRow + 1][curCol].requestFocus();
break;
case KeyEvent.VK_LEFT:
if (curCol > 0)
buttons[curRow][curCol - 1].requestFocus();
break;
case KeyEvent.VK_RIGHT:
if (curCol < buttons[curRow].length - 1)
buttons[curRow][curCol + 1].requestFocus();
break;
default:
break;
}
}
});
add(buttons[i][j]);
}
}
}
private KeyListener enter = new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
((JButton) e.getComponent()).doClick();
}
}
};
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new ButtonPane(4, 4));
f.pack();
f.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
要运行它,只需粘贴到一个名为的类中ButtonPane.
这里重要的一点是在调用箭头键时调用requestFocus()正确JButton的.KeyListener当按下Enter键时,我还注册了一个额外的.
| 归档时间: |
|
| 查看次数: |
5257 次 |
| 最近记录: |