我添加了一个“终端”,它将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();
}
}
}
});
答案 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并再次添加。