添加滚动到文本区域
Posted
技术标签:
【中文标题】添加滚动到文本区域【英文标题】:Add scroll into text area 【发布时间】:2012-04-27 23:07:21 【问题描述】:如何将滚动条添加到我的文本区域。我已尝试使用此代码,但它不起作用。
middlePanel=new JPanel();
middlePanel.setBorder(new TitledBorder(new EtchedBorder(), "Display Area"));
// create the middle panel components
display = new JTextArea(16, 58);
display.setEditable(false); // set textArea non-editable
scroll = new JScrollPane(display);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
//Add Textarea in to middle panel
middlePanel.add(scroll);
middlePanel.add(display);
【问题讨论】:
那么当文本达到区域限制时会发生什么? 【参考方案1】:在此处将 JTextArea 添加到 JScrollPane 后:
scroll = new JScrollPane(display);
你不需要像你一样再次将它添加到其他容器中:
middlePanel.add(display);
只需删除最后一行代码,它就可以正常工作。像这样:
middlePanel=new JPanel();
middlePanel.setBorder(new TitledBorder(new EtchedBorder(), "Display Area"));
// create the middle panel components
display = new JTextArea(16, 58);
display.setEditable(false); // set textArea non-editable
scroll = new JScrollPane(display);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
//Add Textarea in to middle panel
middlePanel.add(scroll);
JScrollPane 只是另一个容器,它可以在需要时在组件周围放置滚动条,并且还具有自己的布局。当您想将任何内容包装到滚动中时,您只需将其传递给 JScrollPane 构造函数即可:
new JScrollPane( myComponent )
或像这样设置视图:
JScrollPane pane = new JScrollPane ();
pane.getViewport ().setView ( myComponent );
补充:
这是一个完整的例子,因为你仍然没有让它工作:
public static void main ( String[] args )
JPanel middlePanel = new JPanel ();
middlePanel.setBorder ( new TitledBorder ( new EtchedBorder (), "Display Area" ) );
// create the middle panel components
JTextArea display = new JTextArea ( 16, 58 );
display.setEditable ( false ); // set textArea non-editable
JScrollPane scroll = new JScrollPane ( display );
scroll.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );
//Add Textarea in to middle panel
middlePanel.add ( scroll );
// My code
JFrame frame = new JFrame ();
frame.add ( middlePanel );
frame.pack ();
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );
这就是你得到的:
【讨论】:
添加了您应该使用的代码。也许您也想在其他地方添加它?如果这样做,JTextArea 将从滚动窗格中移出并放在新位置。 我没有在其他任何地方使用。 它应该可以工作。似乎您有一些额外的代码会影响容器或滚动窗格。检查编辑的答案 - 有一个完整的工作示例。或者这不是你想要的? 是的,它现在可以工作了。我在面板中添加了 textarea 而不是 middlePanel.add(scroll) 但我只是替换它并开始工作谢谢:) 正如@LihO 在他的回答中指出的那样,setBounds
对 scroll
对象的调用也是它对我有用的原因。【参考方案2】:
我幼稚的假设是滚动窗格的大小将自动确定...
真正对我有用的唯一解决方案是明确地查看 JScrollPane 的边界:
import javax.swing.*;
public class MyFrame extends JFrame
public MyFrame()
setBounds(100, 100, 491, 310);
getContentPane().setLayout(null);
JTextArea textField = new JTextArea();
textField.setEditable(false);
String str = "";
for (int i = 0; i < 50; ++i)
str += "Some text\n";
textField.setText(str);
JScrollPane scroll = new JScrollPane(textField);
scroll.setBounds(10, 11, 455, 249); // <-- THIS
getContentPane().add(scroll);
setLocationRelativeTo ( null );
也许它会帮助一些未来的访客:)
【讨论】:
只是一个小提示 - 滚动窗格大小和位置将自动确定,但前提是您为要添加它的容器提供任何布局。现在,在您的示例中,您为内容窗格设置了null
布局:getContentPane().setLayout(null);
- 这就是您需要手动指定边界的原因。否则,如果您设置任何布局 - 例如new BorderLayout()
- 它会自动计算并设置滚动窗格的边界。【参考方案3】:
尝试将这两行添加到您的代码中。我希望它会奏效。它对我有用:)
display.setLineWrap(true);
display.setWrapStyleWord(true);
输出图片如下所示
【讨论】:
【参考方案4】:使用java swing实现滚动条最简单的方法如下:
-
导航到设计视图
右键点击textArea
使用 JScrollPane 选择环绕
【讨论】:
以上是关于添加滚动到文本区域的主要内容,如果未能解决你的问题,请参考以下文章