Я создал небольшое приложение, которое использует JButtons для увеличения чисел.Кнопки не должны быть активируемыми, а активироваться с помощью клавиатуры (т. Е. Числа в textField увеличиваются при нажатии на клавиатуру, а не при нажатии кнопки мыши).Моя проблема в том, что при первом запуске приложения клавиатура ничего не делает, пока я не нажму одну из кнопок - хотя нажатие на кнопку ничего не меняет.Я попытался заставить одну из кнопок requestFocusInWindow()
подумать, что если бы она уже была сфокусирована, клавиши сработали бы, но, похоже, это не сработало, помещаю ли я ее в свой основной метод или класс контроллера.Я пытался выяснить, нужно ли мне делать KeyboardFocusManager
или addFocusListener()
(но я не хочу, чтобы что-то происходило всегда, если кнопка получает / теряет фокус).Я пробовал так много вещей, которые у меня кружатся, пытаясь добавить либо мой основной метод с помощью frame, либо мой класс контроллера.Ниже приведен мой текущий код:
Класс с основным
import javax.swing.JFrame;
public class Count {
public static void main(String[] args) {
CountController frame = new CountController();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(560, 150);
frame.setVisible(true);
//I've tried to add the button and requestFocusInWindow here
//as well as tried a frame.addWindowFocusListener
}
} // end class
Класс контроллера
imports ...
public class CountController extends JFrame implements KeyListener {
private JLabel ...
private JTextField ...
private JButton ....
int ...
// no-argument constructor
public CountController() {
super("Title");
setLayout(null); // position GUI components explicitly
//set up JLabels in following manner
label = new JLabel("some label");
label.setBounds(47, 5, 45, 25);
label.setHorizontalAlignment(JLabel.CENTER);
add(label);
//set up JTextFields in following manner
textField = new JTextField("0");
textField.setBounds(47, 30, 45, 25);
textField.setHorizontalAlignment(JTextField.CENTER);
textField.setBackground(Color.WHITE);
textField.setEditable(false);
add(textField);
//set up JButtons in the following manner
button = new JButton("some text");
button.setBounds(15, 70, 110, 25);
button.setBackground(Color.WHITE);
add(button);
button.addKeyListener(this);
//I've tried adding requestFocusInWindow() here as well
} // end constructor
//begin KeyListener stuff
@Override
public void keyPressed(KeyEvent event){
int keyCode = event.getKeyCode();
switch(keyCode){
case #: //# is ASCII #
do some things;
call a method();
break;
}
}
@Override
public void keyReleased(KeyEvent event){
button.setBackground(Color.WHITE);
}
@Override
public void keyTyped(KeyEvent event){
// nothing but this is needed for implementing KeyListener
}
//List of methods that are called from switch
...
//I've tried to add a public void initialize(){}
}//end CountController class
Iбыл бы признателен за любой вклад, чтобы заставить это работать, чтобы мне не нужно было сначала нажимать кнопку, прежде чем мои ключи сработают.Спасибо!