【发布时间】:2021-04-12 20:08:29
【问题描述】:
这是这些程序中的简单计数器 gui 程序,通过按右箭头计数器增加 1,但问题是每当我运行程序然后按右箭头时,计数器不会增加 1,而是按右箭头文本字段中的光标从左向右移动为什么会发生这种情况?
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class CounterDemo implements KeyListener
{
JTextField jtf;
JButton jb,jb1;
int i=0;
public CounterDemo ()
{
JFrame jf = new JFrame();
jf.setBounds(100,100,400,400);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setLayout(null);
jtf = new JTextField("0");
jtf.setBounds(60,10,50,20);
jf.add(jtf);
JButton jb = new JButton("next");
JButton jb1 = new JButton("prev");
jb.setBounds(10,35,75,20);
jb1.setBounds(90,35,75,20);
jf.add(jb);
jf.add(jb1);
jb.addKeyListener(this);
jb1.addKeyListener(this);
jf.setVisible(true);
}
public static void main(String[] args)
{
new CounterDemo();
}
public void keyPressed(KeyEvent ke)
{
if(ke.getKeyCode() == KeyEvent.VK_RIGHT)
{
i++;
jtf.setText(" "+i);
}
else if (ke.getKeyCode() == KeyEvent.VK_LEFT)
{
i--;
jtf.setText(" "+i);
}
}
public void keyTyped(KeyEvent ke)
{
}
public void keyReleased(KeyEvent ke)
{
}
}
【问题讨论】:
-
你真正想做什么?您的代码只是学习 Swing 的练习吗?当
JButton获得焦点时,您的KeyListener将运行。要了解焦点的工作原理,请参阅How to Use the Focus Subsystem。对于JButton,您应该添加ActionListener而不是KeyListener。在任何情况下,key bindings 通常都比KeyListener好。 -
也许JSpinner更合适?
-
Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同的语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。
-
我同意@Abra re
JSpinner。它为此完美设计。 OTOH 如果坚持使用文本字段/按钮组合,请添加ActionListener而不是KeyListener。并修复该布局!
标签: java swing user-interface jbutton jtextfield