JTree: изменить внешний вид независимо от L & F - PullRequest
2 голосов
/ 30 марта 2012

У меня есть JTree, который я пытаюсь изменить, чтобы фактическая область выбора для любого выбранного узла расширялась от самого левого края JTree до самого правого от JTree.

В большинстве примеров в Интернете говорится о расширении BasicTreeUI.Оттуда вы просто модифицируете методы, которые определяют область выбора, и все.Однако для этого потребуется, чтобы JTree - независимо от того, на какой платформе он работает, - использовал эту реализацию.На самом деле я не смогу воспользоваться преимуществами различных реализаций пользовательского интерфейса, предназначенных для конкретных платформ, поскольку я всегда буду использовать BasicTreeUI (а не реализации Metal, Windows или Aquia).быть в состоянии сделать это - взять любую реализацию BasicTreeUI, которая в настоящее время установлена ​​на JTree, и обернуть ее в мою собственную оболочку, которая расширяет BasicTreeUI.Оттуда я переопределил бы все методы и делегировал бы обернутый пользовательский интерфейс, и сделал бы мою собственную реализацию нескольких методов, где требуется пересчитать область выбора узла.Однако большинство методов в BasicTreeUI защищены, поэтому я действительно могу это сделать.

Не уверен, как обойти это ... любые идеи приветствуются!

1 Ответ

2 голосов
/ 31 марта 2012

Возможно, вы могли бы переопределить setUI и обернуть предоставленный пользовательский интерфейс в пользовательский пользовательский интерфейс дерева следующим образом:

@Override
public void setUI(TreeUI ui) {
    super.setUI(new MyCustomTreeUI(ui));
}

Другой вариант, который необходимо рассмотреть, - это поиск / настройка свойств пользовательского интерфейса дерева в глобальном UIManager. Я полагаю, что зависящие от платформы пользовательские интерфейсы дерева будут запрашивать глобальные UIManager значения свойств и настраивать себя соответствующим образом - возможно, вы могли бы просто сделать что-то вроде UIManager.put("Tree.selectionWidth", 100).

...