0

我的虚拟键盘快完成了,我正在努力提高性能。

我想问你。这是用于替换按钮中字符的任何更好/更快的解决方案。

getButtons() => 列表< JButton >

有52个按钮需要替换文本,16个按钮被其他字符替换,36个大写。在 1.6GHz 双核上大约需要 0.5-0.7 秒。我想做大约 0.2-0.3 或即时:D

   public void toLowerCase()
    {

        String[] from =
        {
            "§", "'", "\"", "+", "!", "%", "/", "=", "(", ")", ":", "_", "*", "#", ";", "?"
        };
        String[] to =
        {
            "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "-", "\\", "$", ",", "ß"
        };

        char curChar;
        for (int i = 0; i < getButtons().size(); i++)
        {
            curChar = toChar(((JButton) getButtons().get(i)).getText());
            for (int x = 0; x < from.length; x++)
            {
                if (compareChar(curChar, toChar(from[x])))
                {
                    ((JButton) getButtons().get(i)).setText(to[x]);
                }
            }
            ((JButton) getButtons().get(i)).setText(((JButton) getButtons().get(i)).getText().toString().toLowerCase());
        }
        repaint();
    }

非常感谢大家:-)

4

3 回答 3

3

是的,使用地图:

Map<String, String> map = new HashMap<>();
map.put("§", "0");
...

String toChar = map.get(curChar);
if (toChar!=null) ((JButton) getButtons().get(i)).setText(toChar);

但是您应该在方法之外初始化映射并重用它。

于 2013-05-24T13:35:49.867 回答
0

您可以静态初始化不同类型的键盘,而不是进行替换。

static Map<String,String> defaultKeyBoard = ...;  
static Map<String,String> otherKeyBoard = ...;  

static  
{    
    //populate keyboard maps
}  

现在您可以根据布尔条件在不同的键盘之间切换。

如果您只计算一次,您就可以节省所有时间,并且每次只需进行一次完全替换,而无需重建地图或进行昂贵的计算。

于 2013-05-24T13:37:12.873 回答
0

我会将其视为面向对象的设计问题,而不是数据结构/算法问题。尝试这样的事情:

public class ToggleCaseJButton extends JButton {

    private final String upperCaseText;

    private final String lowerCaseText;

    public ToggleCaseJButton(String upperCaseText, String lowerCaseText) {
        this.upperCaseText = upperCaseText;
        this.lowerCaseText = lowerCaseText;
    }

    public void setUpperCase() {
        setText(upperCaseText);
    }

    public void setLowerCase() {
        setText(lowerCaseText);
    }
} 

然后键盘会有这样的东西:

private final List<ToggleCaseJButton> keys = new ArrayList<ToggleCaseJButton>();

private void setupKeys() {
    keys.add(new ToggleCaseJButton("!", "1");
    keys.add(new ToggleCaseJButton("@", "2");
    // etc...
}


public void setUpperCase() {
    for (ToggleCaseJButton key : keys) {
        key.setUpperCase();
    }
    repaint();
}    

public void setLowerCase() {
    for (ToggleCaseJButton key : keys) {
        key.setLowerCase();
    }
    repaint();
}
于 2013-05-24T13:43:22.057 回答