如何刷新JDesktopPane

时间:2017-04-11 13:59:24

标签: java swing jframe jinternalframe jdesktoppane

我添加了一个“终端”,它将JInternalFrame扩展到我的JDesktopPane中。终端构造函数就像

public Terminal(Executable exec)

其中Executable是包含抽象方法elab的接口,我将该实例存储到变量中。所以当我按“OK”时,我会调用exec.elab(String arg)方法。在我的JDesktopPane中,我创建了一个Terminal(new BasicCommands())。在创建之后,使用命令,我想用terminal.setExec(new AdvancedCommands())更改终端的实例,其中AdvancedCommands和BasicCommands是实现Executable接口并包含它们自己的elab方法的类。因此,当我这样做时,我没有任何警告或其他事情,但是当我想调用terminal.setExec(new AdvancedCommands())来改变我的详细方法时,没有任何改变......我怎么能这样做?我尝试使用刷新终端(重新验证和重新绘制),但没有...

我如何在终端类中添加keyListener:

inputArea.addKeyListener(new KeyAdapter() {
        @Override
        public void keyReleased(KeyEvent arg0) {
            if (arg0.getKeyCode()==KeyEvent.VK_ENTER){
                if(!inputArea.getText().isEmpty()){
                    scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum());
                    exec.elab(new Str(inputArea.getText())); //I want to change this method with ter.setExec(some class that implements Executable);
                    clearInputArea();
                }
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

我找到了一个有效的解决方案,但我不知道其他人是否更好:

public void refresh(){
    revalidate();
    repaint();
    inputArea.removeKeyListener(ad);
    ad = new KeyAdapter() {
        @Override
        public void keyReleased(KeyEvent arg0) {
            if (arg0.getKeyCode()==KeyEvent.VK_ENTER){
                if(!inputArea.getText().isEmpty()){
                    scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum());
                    exec.elab(new Str(inputArea.getText()));
                    clearInputArea();
                }
            }
        }
    };
    inputArea.addKeyListener(ad);
}

我已创建此方法,我删除了我的keylistener并再次添加。