任何人都帮助我如何JTextArea
使用Swing in Java 添加滚动条?
在JTextArea
刚消失的时候我添加滚动条就可以了.
希望有人让我在上面添加一个垂直滚动条.
另外的解释将非常感谢
public class Practice extends JFrame { JFrame frame = new JFrame("AAA"); JTextArea textarea = new JTextArea(); JScrollPane scroll = new JScrollPane(textarea); JPanel panelForScroll = new JPanel(null); public Practice(){ frame.setLayout(null); frame.setBounds(100,100,400,710); frame.setResizable(false); frame.setVisible(true); textarea.setEditable(false); textarea.setFont(new Font("arian", Font.BOLD, 16)); textarea.setBounds(20, 280, 340, 70); panelForScroll.add(scroll); frame.add(panelForScroll); //can't find text area.... } public static void main(String[] args) { new Practice(); } }
Frakcool.. 7
您的代码中有几个错误:
您使用的是null
布局,因为它产生的问题比解决方案,特别是当您尝试使用此不鼓励JScrollPanes
,因为他们采取preferredSize
的Component
决定是否添加滚动条或没有.看到Null布局是邪恶的,为什么在Swing中使用null布局不赞成?有关此内容的更多信息.要解决此问题,请删除此行:
frame.setLayout(null);
而是使用布局管理器或它们的组合以及边框,以获得组件之间的额外间距.
虽然null
布局可能看起来是为Swing新手设计复杂GUI的最佳,最简单和最快捷的方式,但是你进步的越多,你会发现与使用它们相关的问题就越多(就像它的情况一样)
你正在扩展你的课程JFrame
,你也在创建一个实例JFrame
,请使用其中一个.当你扩展JFrame
你说你的班级是一个 JFrame
因此它不能被放在另一个,Container
因为JFrame
是一个僵硬的容器.我建议忘记该extends JFrame
部分,因为无论如何你没有使用JFrame
由此动作生成的部分并保持你创建的对象.有关此问题的详细解答,请参阅/sf/ask/17360801/.
在添加所有元素之前,您可以看到GUI,这可能会导致GUI在您将鼠标悬停在其上时不显示所有元素,此行:
frame.setVisible(true);
应该是程序中的最后一行
您没有将您的程序放在事件调度线程(EDT)上,这会使您的应用程序不是线程安全的,您可以通过在您的main
方法上编写它来修复它.
SwingUtilities.invokeLater(new Runnable() { @Override public void run() { //Place your constructor here } });
你正在设置边界textArea
而不是设置界限scrollPane
,但你真的不应该手动设置边界(再次参见第1点).
现在,你可以做一个简单的GUI具有JTextArea
用JScrollPane
如下:
import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; public class ScrollPaneToTextArea { private JTextArea textArea; private JFrame frame; private JScrollPane scroll; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new ScrollPaneToTextArea().createAndShowGui(); } }); } public void createAndShowGui() { frame = new JFrame("ScrollPane to TextArea"); textArea = new JTextArea(10, 20); //Rows and cols to be displayed scroll = new JScrollPane(textArea); // scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); frame.add(scroll); //We add the scroll, since the scroll already contains the textArea frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
产生此输出并在需要时添加滚动条(即当文本比它在视图中可以处理的行更远时)
如果您希望始终显示垂直滚动条,则可以取消注释该行:
scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
这将产生以下输出:
您可以JScrollPane
在文档中以及JTextArea
在自己的文档中阅读更多相关信息.
您的代码中有几个错误:
您使用的是null
布局,因为它产生的问题比解决方案,特别是当您尝试使用此不鼓励JScrollPanes
,因为他们采取preferredSize
的Component
决定是否添加滚动条或没有.看到Null布局是邪恶的,为什么在Swing中使用null布局不赞成?有关此内容的更多信息.要解决此问题,请删除此行:
frame.setLayout(null);
而是使用布局管理器或它们的组合以及边框,以获得组件之间的额外间距.
虽然null
布局可能看起来是为Swing新手设计复杂GUI的最佳,最简单和最快捷的方式,但是你进步的越多,你会发现与使用它们相关的问题就越多(就像它的情况一样)
你正在扩展你的课程JFrame
,你也在创建一个实例JFrame
,请使用其中一个.当你扩展JFrame
你说你的班级是一个 JFrame
因此它不能被放在另一个,Container
因为JFrame
是一个僵硬的容器.我建议忘记该extends JFrame
部分,因为无论如何你没有使用JFrame
由此动作生成的部分并保持你创建的对象.有关此问题的详细解答,请参阅/sf/ask/17360801/.
在添加所有元素之前,您可以看到GUI,这可能会导致GUI在您将鼠标悬停在其上时不显示所有元素,此行:
frame.setVisible(true);
应该是程序中的最后一行
您没有将您的程序放在事件调度线程(EDT)上,这会使您的应用程序不是线程安全的,您可以通过在您的main
方法上编写它来修复它.
SwingUtilities.invokeLater(new Runnable() { @Override public void run() { //Place your constructor here } });
你正在设置边界textArea
而不是设置界限scrollPane
,但你真的不应该手动设置边界(再次参见第1点).
现在,你可以做一个简单的GUI具有JTextArea
用JScrollPane
如下:
import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; public class ScrollPaneToTextArea { private JTextArea textArea; private JFrame frame; private JScrollPane scroll; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new ScrollPaneToTextArea().createAndShowGui(); } }); } public void createAndShowGui() { frame = new JFrame("ScrollPane to TextArea"); textArea = new JTextArea(10, 20); //Rows and cols to be displayed scroll = new JScrollPane(textArea); // scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); frame.add(scroll); //We add the scroll, since the scroll already contains the textArea frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
产生此输出并在需要时添加滚动条(即当文本比它在视图中可以处理的行更远时)
如果您希望始终显示垂直滚动条,则可以取消注释该行:
scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
这将产生以下输出:
您可以JScrollPane
在文档中以及JTextArea
在自己的文档中阅读更多相关信息.