private void init(final Controller controller) { time.setRightAligned(true); time.setMaxLength(MAX_DURATION_LENGTH); time.setText(String.valueOf(frame.getTime())); time.setTextFieldFilter( new TextFieldFilter() { @Override public boolean acceptChar(TextField textField, char c) { return Character.isDigit(c) || c == '.'; } }); time.addListener( new InputListener() { private String previousText = time.getText(); @Override public boolean keyTyped(InputEvent event, char character) { String text = time.getText(); if (!text.isEmpty() && !text.equals(previousText)) { float timeVal = previousTime; try { timeVal = Float.valueOf(text); } catch (NumberFormatException formatEx) { Gdx.app.error( "FrameWidget", "Error getting frame time, setting previous time: " + previousTime, formatEx); } if (timeVal != previousTime) { controller.action(SetFrameTime.class, frame, timeVal); previousText = String.valueOf(timeVal); } } return true; } }); EditorGameAssets assets = controller.getEditorGameAssets(); assets.get( ((es.eucm.ead.schema.renderers.Image) frame.getRenderer()).getUri(), Texture.class, new AssetLoadedCallback<Texture>() { @Override public void loaded(String fileName, Texture asset) { ((Image) widget).setDrawable(new TextureRegionDrawable(new TextureRegion(asset))); } }, true); controller.getModel().addFieldListener(frame, textfieldListener); }