Java 如何使JTextArea可滚动?
我一直在尝试将Java 如何使JTextArea可滚动?,java,swing,jscrollpane,jtextarea,Java,Swing,Jscrollpane,Jtextarea,我一直在尝试将JScrollBar添加到JTextArea中,但是当我测试它时,滚动条没有显示出来。此外,我希望最大化文本区域,但即使更改大小值,文本区域也不会变大。这是我的密码: class EFrame extends JFrame implements ActionListener { JLabel jl1, jl2, jl3, jl5; JTextArea jta; JPanel jpBase, jpTop, jpm, jpmm, jpmb, jpBottom,
JScrollBar
添加到JTextArea
中,但是当我测试它时,滚动条没有显示出来。此外,我希望最大化文本区域,但即使更改大小值,文本区域也不会变大。这是我的密码:
class EFrame extends JFrame implements ActionListener {
JLabel jl1, jl2, jl3, jl5;
JTextArea jta;
JPanel jpBase, jpTop, jpm, jpmm, jpmb, jpBottom, jpBBT;
JTextField jtf1, jtf2, jtf3, jtf4, jtf5;
JScrollBar jBar;
JScrollPane jsp;
EFrame() {
setTitle("GUI");
setSize(1000, 1000);
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setMinimumSize(new Dimension(100, 100));
this.setMaximumSize(new Dimension(1920, 1080));
jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpBase = new JPanel();
jpTop = new JPanel();
jpm = new JPanel();
jpmm = new JPanel();
jpmb = new JPanel();
jpBottom = new JPanel();
jpBBT = new JPanel();
jtf1 = new JTextField(10);
jtf2 = new JTextField(10);
jtf3 = new JTextField(10);
jtf5 = new JTextField(10);
add(jpBase);
jpBase.setLayout(new GridLayout(8, 1));
jpBase.setSize(1000, 1000);
jpBase.add(jpTop);
jpBase.add(jpm);
jpBase.add(jpmm);
jpBase.add(jpmb);
jpBase.add(jpBottom);
jpBase.add(jpBBT);
jpTop.setLayout(new GridLayout(1, 0));
jpm.setLayout(new GridLayout(1, 0));
jpmm.setLayout(new GridLayout(1, 0));
jpBottom.setLayout(new GridLayout(1, 0));
jpBBT.setSize(1000, 1000);
jpBBT.add(jta);
jta.setSize(1000, 1000);
jta.add(jsp);
this.setVisible(true);
}
// ...
}
我做错了什么
JTextArea jta;
该代码不会创建文本区域的实例。它只定义一个空的引用
您的代码应该类似于:
JTextArea jta = new JTextArea(10, 40);
上面的代码将创建一个包含10行40列的文本区域
然后使用文本区域(正确)创建滚动窗格:
注意:您只需要:
jsp = new JScrollPane(jta);
默认行为是仅在需要时显示滚动条
然后你会:
jpBBT.add(jta);
组件只能有一个父级。因此,第二条语句是从滚动窗格中删除文本区域
代码应为:
//jpBBT.add(jta);
jpBBT.add(jsp);
现在你需要摆脱:
//jta.setSize(1000, 1000);
//jta.add(jsp)
另外,使用描述性变量名可以使代码更易于阅读、理解和维护。好吧,一开始你就不会在JTextArea位于底部的任何地方构建JTextArea,JTextArea位于底部-设置文本区域的大小不会创建文本区域的实例。您的代码不应执行。你应该得到一个NullPointerException。很高兴它有帮助。不要忘记通过点击复选标记(答案旁边)来“接受”答案,这样人们就知道问题已经解决了。请参阅:。
//jta.setSize(1000, 1000);
//jta.add(jsp)