Visual Studio идентичное маркерное выделение

Вы создаете экземпляр контроллера «вручную» с помощью

MainController mc = new MainController();

@FXML -но заданные поля инициализируются FXMLLoader, когда он создает контроллер для вас как часть процесса загружая файл FXML. Поскольку созданный вами контроллер не является экземпляром контроллера, созданным FXMLLoader, его @FXML -занятые поля неинициализируются (т. Е. Они являются нулевыми), и, следовательно, вы получаете исключение нулевого указателя.

Вы может получить ссылку на контроллер, созданный FXMLLoader, вызвав getController() в экземпляре FXMLLoader после вызова load().

Если вы хотите, чтобы один контроллер связывался с другим, затем передайте ссылку на один контроллер на другой контроллер, определив соответствующие методы во втором контроллере:

public class ConnectionErrorController implements Initializable {

    private MainController mainController ;

    public void setMainController(MainController mainController) {
        this.mainController = mainController ;
    }

    // ...

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

        infoLabel.setText("Connection lost, please try again");
        tryButton.setText("try again");
        exitButton.setText("exit");

        tryButton.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent event) {

                WebEngine webEngine = mainController.getContentPaneController().getVideoWebView().getEngine(); // 1
                ToggleButton playButton = mainController.getControlPaneController().getPlayButton(); // 2
                if (mainController.testInet()) {
                    mainController.play(webEngine, playButton);
                } else {
                    // obviously you can now do something better than the "public static field hack" here:
                    MainController.exist = false;
                }
                tryButton.getScene().getWindow().hide();
            }
        });

        // ...
    }
}    

Предполагая, что вы загружаете второй файл fxml в методе в MainController, вы можете просто сделать что-то например:

public class MainController {

    // ...

    public void showConnectionErrorWindow(String fileName) {

        FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/ConnectionError.fxml"));
        Parent root = loader.load();
        ConnectionErrorController connectionErrorController = loader.getController();
        connectionErrorController.setMainController(this);

        Scene scene = new Scene(root);
        Stage stage = new Stage();
        // etc...
    }

    // ...
}

Обратите внимание, что есть гораздо более элегантные способы решения этой проблемы, такие как передача функции ConnectionErrorController обратного вызова (в форме лямбда-выражения) для обработки вызова play(...), которые избегают жесткой связи между ConnectionErrorController и MainController. Однако, поскольку вы, кажется, новичок в Java, этот более простой подход может быть более подходящим.

См. Параметры передачи JavaFX FXML для получения дополнительной информации о передаче значений контроллерам.

67
задан Cœur 9 August 2017 в 04:11
поделиться

8 ответов

В различном вопросе на ТАК ( ссылка ), кто-то упомянул VS 2005 / дополнение VS 2008 "RockScroll". Это, кажется, обеспечивает функцию "значения погрешности", о которой я справлялся в своем вопросе выше.

РЕДАКТИРОВАНИЕ RockScroll

: RockScroll также делает идентичный маркер, выделяющий это, я искал! Здорово!

11
ответ дан Community 24 November 2019 в 14:43
поделиться

Автоматическое выделение реализовано в Визуальный, Помогают как команда "Find References" рефакторинга. Это выделяет все происшествия данной переменной или метода, но это не автоматически (связанный с сочетанием клавиш на моем компьютере).

Вот экс-клен:

alt text

3
ответ дан Neysor 24 November 2019 в 14:43
поделиться

DevExpress CodeRush делает это при нажатии TAB, когда курсор находится в идентификаторе, можно тогда снабдить вкладками через все выделенные экземпляры. Существует также плагин DXCore (основа, на котором CodeRush/Refactor Pro создаются), который делает выделение текущей строки.

2
ответ дан Duncan Smart 24 November 2019 в 14:43
поделиться

Функциональность "значения погрешности" обеспечивается в JetBrains ReSharper. Я не уверен, делает ли это выделение ссылок на в настоящее время выбираемый идентификатор.

1
ответ дан 24 November 2019 в 14:43
поделиться

О RockScroll: Он не выделяет идентификаторы. Он выделяет только одну и ту же строку в исходном коде! Если объявлен аналогичный идентификатор: ex. _test и test, и test выделен, он также выделит строку "test" в переменной _test! И он также выделит ту же строку в методе под названием «sometesting ()». Так что это не совсем то, что затмение, и у меня не работает.

3
ответ дан 24 November 2019 в 14:43
поделиться

Функциональность выделения удобно реализована в VisualAssist . На мой взгляд, они оба необходимы.

1) Выделите идентификатор при редактировании курсора: Параметры -> Дополнительно -> Рефакторинг -> Автоматически выделять ссылки на символ под курсором

2) Выделить результат поиска - во всех окнах. Работает для RegExps! Параметры -> Дополнительно -> Дисплей -> Выделить результаты поиска

8
ответ дан 24 November 2019 в 14:43
поделиться

Старый вопрос, но ... В Visual Studio 2010 наконец-то встроена эта функция.

9
ответ дан 24 November 2019 в 14:43
поделиться

Существует альтернатива RockScroll под названием MetalScroll, которая, по сути, является тем же самым, но с некоторыми изменениями и улучшениями.

Также существует небольшой и простой WordLight плагин, который выделяет только идентичные лексемы.

Оба имеют открытый исходный код и поддерживают складывание кода, что очень приятно.

Имхо, полоса рядом с полосой прокрутки в Eclipse - гораздо более элегантное решение, чем замена полосы прокрутки RockScroll/MetalScroll. К сожалению, я не смог найти ни одного плагина для VS, который бы делал это так же, как в Eclipse, поэтому я просто придерживаюсь WordLight.

32
ответ дан 24 November 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: