在JComponent上显示一行字符串,以便可以选择单个字符串/它们的位置getLocation() - 能够吗?

时间:2011-08-22 08:29:21

标签: java string swing jcomponent

为了能够在JPanel上显示一个句子GridLayout(1,0) [即只有一行/行]然后能够绘制语法树(或类似句子) )在它之上,我想将句子显示为一行String s,每行包含一个单词。

单个String应该是可选择的(如在JList中),或者至少应该能够通过{{1}在JPanel上获取其位置}。

到目前为止,我尝试了以下选项,并遇到以下问题: - 单getLocation()作为String s:JLabel被展开以填充JLabel宽度,重新调整它们以适合单JPanelString显示似乎很复杂。然而,我希望能够做到这一点,使句子看起来像一个句子而不是像一张布置不好的桌子。 - JList:我想要的所有功能,但我不知道可以选择重新调整单个String的“单元格”(参见上面的JLabel)。此外,我很难将JList的显示限制为单行/行(参见another of my questions)。 - JTextArea:我无法理解如何获取我附加到String的单个JTextArea的位置。

我知道drawString() 可能是一个选项,但我不敢使用它,因为我不想混合使用AWT和Swing。另外,我需要为每个int计算xy的{​​{1}}值。而且我不确定我是否能够获得他们的位置(尽管我当然可以将他们的String保存在地图或矢量中,因为无论如何我必须计算它们。)

感谢任何建议!谢谢!

2 个答案:

答案 0 :(得分:3)

我会使用JTextArea和方法modelToView()/viewToModel()来获取x,y表示字符串中的位置以及坐标x和y的字符串中的位置。

还使用UtilitiesgetWordStart() getWordEnd() getRowStart() getRowEnd()方法。

答案 1 :(得分:1)

编辑:正如评论中的camickr所指出的,setSize()不适合布局组件(因为这是由相应的LayoutManager自动完成的,我已从我的相应代码中删除了答案。

StanislavL's answer触发,我找到了一个解决方案,可以通过JTextField来完成,虽然每个String使用一个而不只是一个(正如StanislavL所建议的那样)。

我现在可以轻松getLocation()为每个JTextField。很简单,真的!

我要感谢斯坦尼斯拉夫的回答,没有这个回答我就不会有这个问题,并且对他的评论表示不满。