2013-07-15 75 views
1

我想从一个.txt文件中输出文本,这个文本将会有越来越多的文本,但是如果我这样做而不修改JLabel的大小,那么文本就会熄灭屏幕,是否有可能以某种方式自动增加一个JLabel,同时以某种方式检测需要增加多少以填充所有文本?还是有没有其他的文本持有人不能编辑,但会满足这种需求?自动增加JLabel

+1

使用[** JList **](http://docs.oracle.com/javase/tutorial/uiswing/components/list.html)来代替lables。 – Azad

+2

1-使用不可编辑的JTextArea 2-将文本包装在html – MadProgrammer

+0

中,取决于您的确切要求/上下文 - 在描述问题时(以及它应该如何表现)应该是精确的,最好使用SSCCE – kleopatra

回答

5

您可以制作任何Swing组件Document不可编辑,因此您可以自由选择。选择可以很好包装在JScrollPane中的东西,如上面提到的JListJTextArea,是一个不错的选择。

+2

链接到一些教程,赚取upvote;) – MadProgrammer

+0

好点,会做 –

+0

非常感谢,我会接受答案,因为令人敬畏的文档 – Ted

1

虽然可变尺寸JLabel可能不是很好的UI风格,但可以通过将JLabel放入适当的布局管理器并请求新布局来实现所需的功能。如何强制新的布局描述如下here

SwingUtilities.invokeLater(new Runnable { 
          public void run() { 
           somecomponent.repaint(); 
          } 
          }); 
+1

revalidate()做到这一点,重新绘制代码行()需要在某些情况下添加 – mKorbel

+0

谢谢,我会给它一个投下 – Ted

1

如果您有长文本,请使用文本区。 不建议自动增加组件长度。因为屏幕上其他组件的对齐可能会受到影响。

对于这些类型的情况,我们依靠滚动条

因此。使用TextArea,为它们设置一个preferredSize。然后使用ScollBar,如果文本 超出首选大小。

另一个解决方案:确定组件的最小和最大尺寸。默认显示 将以最小尺寸显示文字。如果文字增加,则增加文字区域的大小。 停止增加尺寸直到达到最大尺寸。如果显示最大值,则显示滚动条。 请记住,您可能必须重写JTextArea或其UIComponent(首选)。

+1

的投票[setXXSize - do not,ever](http://stackoverflow.com/a/ 7229519/203657)JTextArea的api可以根据行/列设置其首选大小,如果需要,合适的LayoutManager将处理任何进一步的微调 – kleopatra

+1

@kleopatra我同意。我想我只提到了preferredSize(大胆)。但是,如果您使用自定义ComponentUI,则可以非常好地控制组件,并且可以明智地使用这些值。 ComponentUI处理渲染组件的主要责任。请参阅http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/ComponentUI。html – veritas

+0

非常感谢你的veritas – Ted