Показать строку строк в JComponent так, чтобы отдельные строки можно было выбирать / их расположение getLocation () - в состоянии? - PullRequest
4 голосов
/ 22 августа 2011

Чтобы иметь возможность отображать предложение, скажем, JPanel с GridLayout(1,0) [т.е. только одной строкой / строкой], а затем иметь возможность рисовать синтаксическое дерево (или подобное) над ним,Я хочу отобразить предложение в виде строки String s, каждое из которых включает в себя одно слово.

Одиночные String s должны быть либо выбраны (как в JList), либо я долженпо крайней мере, иметь возможность получить их местоположение на JPanel через getLocation().

До этого момента я пробовал следующие варианты и имел следующие проблемы: - Один String s как JLabel s: JLabel s растянуты, чтобы заполнить ширину JPanel, изменение их размера, чтобы соответствовать одному String, которое они отображают, кажется сложным.Я хотел бы иметь возможность сделать это, однако, чтобы предложение выглядело как предложение, а не как плохо выложенная таблица.- JList: все функции, которые мне нужны, но я не знаю, как изменить размер «ячеек» одного String (см. JLabel выше).Кроме того, у меня возникают трудности с ограничением отображения JList одной строкой / строкой (см. еще один из моих вопросов ).- JTextArea: я не мог разобраться, как узнать местоположение одиночных String s, которые я добавил к JTextArea.

Я знаю, что drawString() может быть вариант, но я боюсь его использовать, так как не хочу смешивать AWT и Swing.Кроме того, мне нужно будет вычислить значения int для x и y для каждого String.И я не уверен, смогу ли я вообще получить их Местоположения (хотя я, конечно, мог бы сохранить их int на карте или векторе, так как я все равно должен их вычислять).

Благодарен за любые предложений!Спасибо!

Ответы [ 2 ]

3 голосов
/ 22 августа 2011

Я бы использовал JTextArea и метод modelToView()/viewToModel() для получения x, y для позиции в строке n и позиции в строке для координат x и y.

Также используйте Utilities class getWordStart() getWordEnd() getRowStart() getRowEnd()методы.

1 голос
/ 22 августа 2011

РЕДАКТИРОВАТЬ: Как отметил camickr в комментариях, setSize() не является подходящим способом размещения Компонентов (так как это автоматически делается соответствующими LayoutManager, я удалил соответствующий код из своего ответа.

Инициировано ответом StanislavL , я нашел решение сделать это через JTextField, хотя, используя один для каждого String, а не один (как предложил StanislavL).

Теперь я могу легко getLocation() для каждого JTextField. Просто, правда!

Я хотел бы поблагодарить StanislavL за его ответ, без которого я никогда бы не подумал об этом, и camickr за его комментарий.

...