2016-01-24 2 views
0

У меня есть JTextArea в JPanel. JPanel имеет нулевой макет или использует абсолютный макет. JTextArea имеет фиксированную ширину. Как установить высоту JTextArea в соответствии с ее содержимым?Java - Как установить высоту JTextArea в соответствии с ее содержимым?

У меня есть этот код:

*some random string of varying length* 
String str = "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda" 
      + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda" 
      + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda" 
      + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda" 
      + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda" 
      + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda"; 


JTextArea wtd = new JTextArea(str); 
wtd.setLineWrap(true); 
wtd.setOpaque(false); 
wtd.setEditable(false); 
wtd.setBorder(new EtchedBorder(EtchedBorder.LOWERED)); 
wtd.setLocation(*defined x position*, *defined y position*); 
wtd.setPreferredSize(new Dimension(*fixed width*, *the height depending on the content*)); 
wtd.setSize(wtd.getPreferredSize()); 
add(wtd); 

Спасибо заранее за любую помощь!

ответ

2
  1. Не используйте null макеты. Хотя нулевые макеты и setBounds() могут показаться новичкам Swing, как самый простой и лучший способ создания сложных графических интерфейсов, чем больше Swing GUI вы создадите более серьезные трудности, с которыми вы столкнетесь при их использовании. Они не будут изменять размеры ваших компонентов при изменении размера графического интерфейса, они являются королевской ведьмой для улучшения или поддержки, они полностью не выполняются при размещении в scrollpanes, они выглядят ужасно ужасно при просмотре на всех платформах или разрешениях экрана, отличных от исходного ,
  2. Не устанавливайте абсолютные высоты или ширину или предпочтительные размеры для JTextAreas - при этом вы полностью предотвращаете их использование в JScrollPanes.
  3. Вместо этого задайте свойства столбца и строки JTextArea.
+0

Спасибо за ответ! Я использую пустые макеты, потому что я делаю что-то вроде Relative Layout (например, Android). Если есть макет, похожий на относительный макет, какой он? Кроме того, как узнать количество строк, в которые я ввел строку? Строка, которую я помещаю внутри JTextArea, может изменяться, и она не привязана к определенному числу символов. – esfox

+0

@cLix: Я не знаком с относительной компоновкой, но всегда считаю, что вложенные JPanels, каждый со своим макетом, позволяет просто создавать сложные графические интерфейсы. Также посмотрите на сторонние макеты, такие как MigLayout. –

+0

Вложение JPanels - хорошая идея. Я попытаюсь найти макет, который бы соответствовал тому, что я хотел бы сделать. Кстати, относительный макет, о котором я говорю, - это макет, в котором позиция компонентов будет основываться на позиции других компонентов. Например, если я хочу, чтобы JButton находился под JLabel, я собираюсь получить y-позицию и высоту JLabel, а затем добавить их (или добавить пробел, который определен) и установить его в y-позицию JButton. Это что-то вроде этого. – esfox

Смежные вопросы