Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在键入键事件时更改JButton颜色?_Java_Swing_Background_Jbutton_Keylistener - Fatal编程技术网

Java 如何在键入键事件时更改JButton颜色?

Java 如何在键入键事件时更改JButton颜色?,java,swing,background,jbutton,keylistener,Java,Swing,Background,Jbutton,Keylistener,我的项目是创建一个虚拟键盘,当用户在键盘上键入相应的按钮时,键盘上的按钮必须改变颜色。 即如果我键入“e”,虚拟键盘上的字母“e”必须改变颜色 为了绘制我的键盘,我使用了一个2D JButton数组和一个2D字符串数组来命名按钮并分配它们各自的标签,然后我为每个按钮添加了一个KeyListener界面,在该界面中我指示程序更改按钮的颜色。编译它对我来说很好,但实际的颜色变化不起作用。有人能帮忙吗? 这是密码 private JButton spButton, oneButton, two

我的项目是创建一个虚拟键盘,当用户在键盘上键入相应的按钮时,键盘上的按钮必须改变颜色。 即如果我键入“e”,虚拟键盘上的字母“e”必须改变颜色

为了绘制我的键盘,我使用了一个2D JButton数组和一个2D字符串数组来命名按钮并分配它们各自的标签,然后我为每个按钮添加了一个KeyListener界面,在该界面中我指示程序更改按钮的颜色。编译它对我来说很好,但实际的颜色变化不起作用。有人能帮忙吗? 这是密码

    private JButton spButton, oneButton, twoButton, threeButton, fourButton, fiveButton, sixButton, sevenButton, eightButton,
                nineButton, zeroButton, dashButton, equalsButton, bspButton, tabButton, qButton, wButton, eButton, 
                rButton, tButton, yButton, uButton, iButton, oButton, pButton, rBracketButton, lBracketButton, slashButton,
                capsButton, aButton, sButton, dButton, fButton, gButton, hButton, jButton, kButton, lButton, scButton, 
                sqButton, enterButton, lShiftButton, zButton, xButton, cButton, vButton, bButton, nButton, mButton, 
                commaButton, periodButton, bSlashButton, rShiftButton, upButton, spaceButton, leftButton, downButton, 
                rightButton;
private JButton [][] buttonArray = {{spButton, oneButton, twoButton, threeButton, fourButton, fiveButton, 
    sixButton,sevenButton, eightButton, nineButton, zeroButton, dashButton, equalsButton, bspButton},
                                    {tabButton, qButton, wButton, eButton, rButton, tButton, yButton, uButton, 
        iButton, oButton, pButton, rBracketButton, lBracketButton, slashButton},
                                    {capsButton, aButton, sButton, dButton, fButton, gButton, hButton,
            jButton, kButton, lButton, scButton,  sqButton, enterButton},
                                    {lShiftButton, zButton, xButton, cButton, vButton, bButton, nButton, mButton, 
                commaButton, periodButton, bSlashButton, rShiftButton, upButton},
                                    {spaceButton, leftButton, downButton, rightButton}};
private char pressed;


public constructor(){
addKeyListener(new KeyEventsHandler());
}
private class KeyEventsHandler implements KeyListener {

        @Override
        public void keyTyped(KeyEvent e) {

            pressed = e.getKeyChar();
                for (int row = 0; row < keyBoard.length; row ++){
                    for (int column = 0; column < keyBoard[row].length; column ++){
                        if (pressed==buttonArray[row][column].getName().toLowerCase().charAt(0))
                        buttonArray[row][column].setForeground(Color.RED);
                        keyboardPanel.repaint();
                    }
                }




        }

        @Override
        public void keyReleased(KeyEvent e) {

        }

        @Override
        public void keyPressed(KeyEvent e) {

        }


}
private JButton spButton,一个按钮,两个按钮,三个按钮,四个按钮,五个按钮,六个按钮,七个按钮,八个按钮,
nineButton、Zero按钮、dashButton、EqualButton、BSP按钮、tabButton、qButton、WBButton、EBButton、,
B按钮,T按钮,Y按钮,B按钮,I按钮,B按钮,B按钮,B按钮,B按钮,B按钮,B按钮,B按钮,B按钮,
capsButton,aButton,sButton,dButton,fButton,gButton,hButton,jButton,kButton,lButton,scButton,
sqButton、enterButton、Lshift Button、zButton、xButton、CbButton、VbButton、BbButton、NbButton、mButton、,
commaButton、Period按钮、BSLASH按钮、RSShift按钮、Up按钮、spaceButton、leftButton、downButton、,
右键;
私有JButton[][]按钮ray={{{spButton,one button,two button,threeButton,fourButton,fiveButton,
六按钮、七按钮、八按钮、九按钮、零按钮、仪表板按钮、相等按钮、bspButton},
{tabButton,qButton,WBButton,EBButton,RBButton,TBButton,yButton,UBButton,
iButton、oButton、pButton、rBracketButton、lBracketButton、slashButton},
{capsButton,aButton,sButton,dButton,fButton,gButton,hButton,
jButton、kButton、lButton、scButton、sqButton、enterButton},
{lShiftButton、zButton、xButton、cbButton、vbButton、bbButton、nbButton、mButton、,
commaButton、Period Button、BSLASH Button、RSShift Button、upButton},
{spaceButton、leftButton、downButton、rightButton};
私家车;
公共构造函数(){
addKeyListener(新的KeyEventsHandler());
}
私有类KeyEventsHandler实现KeyListener{
@凌驾
public void keyTyped(KeyEvent e){
按下=e.getKeyChar();
for(int row=0;row
提前感谢各位

  • 我没有注意,但@mKobel通知我:由于您使用的是类似
    JButton
    的组件数组,它来自控制组件does action家族,因此我们应该使用
    addActionListener(ActionListener)注册
    ActionListener
    功能或使用,这是更高级别的实现

  • 对于其他容器组件,而不是
    keylister
    S:键侦听器作为键盘输入的低级接口,但对于响应单个键,键绑定更合适,并且往往导致更易于维护的代码。如果要在组件没有焦点时激活键绑定,则键侦听器也很困难

  • 尝试使用
    e.getSource()
    获取事件的源组件,而不是使用
    for
    循环检测此类事件

编辑:

回应@predi的评论如下:

e、 getSource()将返回OPs中具有键盘焦点的组件 案例,这不是很有帮助。他需要提供一些帮助 映射,他做到了

我决定制作一个示例代码,这样就可以复制和粘贴它,从而立即看到键绑定和
event.getSource()
的强大功能,而不是使用长句。还有其他更理想的选择来做简单的事情

GridLayout layout = new GridLayout(0, 4);
        jPanel1.setLayout(layout);

        Action action = new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.err.println("Event generated for source: "+((JButton)e.getSource()).getName());
            }
        };

        for(int i=0 ;i<4; i++)
            for(int j=0; j<4; j++)
            {
                String key = ""+(char)('A' + i * 4 + j);
                JButton button = new JButton(key);
                button.setName(key);
                button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key), "doAction");
                button.getActionMap().put("doAction", action);
                jPanel1.add(button);
            }
GridLayout=newgridlayout(0,4);
jPanel1.setLayout(布局);
Action Action=newAbstractAction(){
@凌驾
已执行的公共无效操作(操作事件e){
System.err.println(“为源生成的事件:”+((JButton)e.getSource()).getName());
}
};
对于(int i=0;i
  • 我没有注意,但@mKobel通知我:由于您使用的是类似
    JButton
    的组件数组,它来自控制组件does action家族,因此我们应该使用
    addActionListener(ActionListener)注册
    ActionListener
    功能或使用,这是更高级别的实现

  • 对于其他容器组件,而不是
    KeyListener
    S:键侦听器作为键盘输入的低级接口,但对于响应单个键来说,键绑定更合适,并且往往导致更易于维护的代码。如果在他没有焦点

  • 尝试使用
    e.getSource()
    获取事件的源组件,而不是使用
    for
    循环检测此类事件

编辑:

回应@predi的评论如下:

e、 getSource()将返回带有