JSplitPane и холст - PullRequest
       5

JSplitPane и холст

2 голосов
/ 18 июля 2011

Как часть приложения, которое я пишу, мне нужно смешать старый (тяжеловесный) Canvas с компонентами Swing - специально вложив их в JSplitPane. Однако, когда я делаю это, разделитель отказывается изменить размер где-либо, как будто ни один холст не примет уменьшение размера. Код, демонстрирующий проблему, выглядит следующим образом:

JFrame frame = new JFrame();
JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new Canvas(), new Canvas());
pane.setResizeWeight(0.5);
frame.add(pane);
frame.pack();
frame.setVisible(true);

Изначально я предполагал, что решить эту простую задачу, однако после тщательного изучения вариантов, кажется, представляется:

  • Вместо этого используйте JPanel (не всегда вариант, как в моем случае, когда я использую vlcj для рендеринга непосредственно на холст)
  • Вставить х хитрый взлом, который может работать в некоторых случаях

Есть ли лучший способ сделать это? Или это действительно случай использования хаков? Я обсуждал другие варианты, такие как возможная альтернативная реализация SplitPane, которая работает, но нет тяжелой реализации, и я был бы удивлен, если бы облегченная избежала проблемы.

1 Ответ

6 голосов
/ 18 июля 2011

JSplitPane использует «минимальный размер» компонента, чтобы определить, может ли компонент сжиматься при использовании разделителя.

Я никогда раньше не использовал Canvas, но кажется, что минимальный размер всегда по умолчанию равен предпочтительному размеру.

Переопределите метод размера getMinimumSize (...) Canvas для возвратаразумный минимум.

Для быстрого текста вы можете использовать:

Canvas canvas = new Canvas();
canvas.setMinimumSize( new Dimension(50, 50) );
JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, canvas, new Canvas());

и вы сможете перемещать разделитель влево, но никогда не вправо.

...