2015-08-24 2 views
1

Я работаю над проектом MVC и имеют следующий вопрос:переопределен метод инициализации не распознает изменения переменной величины при вызове

В целях называется CentralLayout является следующий код:

EventView e = new EventView(); 
gridSchedule.add(e.createView(5), 1, 1, 1, 5); 

, где CreateView метод определен в следующем: интерфейс

public interface Creatable { 
public Node createView(); 
public Node createView(int eventDuration); 

}

EventView реализуется как:

public class EventView extends BaseViewController implements Initializable, Creatable { 


private int PANE_HEIGHT = 10; 
final int PANE_WIDTH = 99; 

@FXML 
private Label lblObjectOne; 

@FXML 
private Label lblObjectTwo; 

@FXML 
private Pane eventPane; 

@Override 
public Node createView() { 
    return null; 
} 

@Override 
public Node createView(int eventDuration) { 
    PANE_HEIGHT = eventDuration * 20; 
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("eventView.fxml")); 
    Parent root = null; 
    try { 
     root = fxmlLoader.load(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return root; 
} 


@Override 
public void initialize(URL location, ResourceBundle resources) { 

System.out.println(PANE_HEIGHT); 

    eventPane.setMaxHeight(PANE_HEIGHT); 
    eventPane.setMaxWidth(PANE_WIDTH); 

    lblObjectOne.setText("test"); 
    lblObjectTwo.setText("test"); 
} 
} 

Примечание: Я создал eventPane в SceneBuilder и его свойства определяются в файле eventView.fxml.

Проблема заключается в том, что конечная, нарисованная высота площадки событий равна 10, а не 100. В значении консоли 10 отображается как значение PANE_HEIGHT.

Может кто-нибудь сказать мне, почему PANE_HEIGHT не изменилось, когда инициализации называется, когда я первый назвал метод CreateView на объекте е и передается значение, умноженное PANE_HEIGHT переменную? Благодарю.

ответ

0

При использовании «FXMLLoader» вы создаете контроллер . Для того, чтобы воспользоваться уже создан, вы должны использовать setController метод FXMLLoader перед загрузкой файла FXML использовать экземпляр контроллера вы создали себе:

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("eventView.fxml")); 
Parent root = null; 
fxmlLoader.setController(this); 
try { 
    root = fxmlLoader.load(); 
+0

Wow, который был быстро. Спасибо, тон! Также мне нужно было убедиться, что в файле .fxml нет набора fx: controller, потому что я запускаю «значение контроллера уже указано». – hideburn

0

Возможно, вы повторно не используете тот же экземпляр EventView (e), когда вы позвоните initialize(). Только экземпляр EventView, который вы использовали для звонка createView(), будет иметь ожидаемое значение для PANE_HEIGHT.

 Смежные вопросы

  • Нет связанных вопросов^_^