JAVA - 如何在单个keyPressed中改变字符'F'/'f'之间的状态?

时间:2013-04-02 06:28:44

标签: java swing jpanel actionlistener keypress

目前,当我点击Ff时:

    private static final char FILL_POLYGON_LOWERCASE = 'f';
    private static final char FILL_POLYGON = 'F';

@Override
public void keyTyped(KeyEvent keyEvent) 
{
    PolygonFiller polyFiller = new PolygonFiller();
    char key = keyEvent.getKeyChar();

    switch(key)
    {
        /**
         *  Fill the polygons 
         */
        case FILL_POLYGON:      
        {
            if (greenLightForFilling == true)
            {
                fillPolygon(polyFiller);

                System.out.print("called");
            }

            break;
        }  // end FILL_POLYGON


        case FILL_POLYGON_LOWERCASE:
        {
            if (greenLightForFilling == true)
            {
                fillPolygon(polyFiller);
            }
            break;  
        }
...

}

该计划进入fillPolygon(polyFiller);

意思是,当我第一次点击f时,我进入fillPolygon()

当我再次点击other()f 时,如何进入其他方法,例如F

由于

3 个答案:

答案 0 :(得分:1)

所以问题是,如果你点击f / F你转到填充多边形,再按f / F会调用其他()。

这可能是有状态类的经典案例。

在班级有一个属性。

在输入f / F时检查值并将其递增1。 在再次输入f / F时,检查该值并将其递增1。

在每次增加之前,你应该检查是否,

//Am assuming that there are more than two functions, else could use boolean

if (value == 1) {
    fillpolygon();
}

else if (value == 2) {
    other();
}
else if (value == 2) {
    some_other();
}

请记住,入口点将是一个单一的功能,从那里根据类似的检查委派流程。

希望这有帮助。

答案 1 :(得分:0)

将之前使用的按钮存储在“currentCommand”和“previousCommand”等变量中。每次检测到新输入时,都会将当前值输入到当前成员中并将新值存储在当前成员中。 或者,如果你想要超过最后两个按键,请使用堆栈。

答案 2 :(得分:0)

  

当我再次点击other()f时,如何进入其他方法,例如F

你需要引入一个布尔标志。

这是state machine的一个非常简单的例子。