java - 滚动条没有出现

标签 java swing

我已经添加了一些滚动条代码,这些代码是我从 stackoverflow 上其他人提出的问题中得到的,但我没有将任何滚动条添加到我的 JTextArea 中。我想在f2框架中的JTextArea区域2中添加滚动条。

import javax.swing.*;
import java.io.*;
import java.awt.event.*;
public class TextAreaExample implements ActionListener {
    JFrame f1 = new JFrame("INPUT WINDOW");
    JFrame f2 = new JFrame("FILE DATA OUTPUT");
    JTextArea area1;
    JTextArea area2;
    JButton b;
    TextAreaExample() {
        area1 = new JTextArea();
        area2 = new JTextArea();
        JScrollPane scroll = new JScrollPane (area2, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        b = new JButton("click Me");
        b.setBounds(100, 95, 80, 30);
        f1.add(b);

        area1.setBounds(10, 30, 200, 60);
        area2.setBounds(5, 5, 480, 480);
        f1.add(area1);
        f2.add(area2);
        f2.add(scroll);
        f1.setSize(300,140);
        f2.setSize(510, 510);  
        f1.setLayout(null);
        f2.setLayout(null);
        f1.setVisible(true);
        f2.setVisible(true);
        b.addActionListener(this);
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == b) {
            String s1 = area1.getText();

            String s2 = "";
            try {
                FileInputStream fin = new FileInputStream(s1);
                BufferedInputStream bin = new BufferedInputStream(fin);
                int i;
                while((i = bin.read()) != -1) {
                     s2 = s2 + (char)i;
                }
                bin.close();
                fin.close();
            }catch(Exception a) {
                System.out.println(a);
            }
            area2.setText(s2);
        }
    }
    public static void main(String args[]) {  
        new TextAreaExample();

    }
}

最佳答案

    JScrollPane scroll = new JScrollPane (area2, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    b = new JButton("click Me");
    b.setBounds(100, 95, 80, 30);
    f1.add(b);

    area1.setBounds(10, 30, 200, 60);
    area2.setBounds(5, 5, 480, 480);
    f1.add(area1);
    f2.add(area2);

首先,使用 JTextArea 作为参数创建 JScrollPane,这是正确的。

但是随后您将文本区域添加到框架中,这是不正确的。 Swing 组件只能有一个父组件,因此文本区域将从滚动 Pane 中删除。

滚动 Pane 必须添加到框架中。

f1.add(scroll);

此外,删除所有空布局和 setBounds() 语句。 Swing 被设计为与布局管理器一起使用。阅读 Swing 教程中关于 Layout Manager 的部分了解更多信息和示例以帮助您入门。

现在,当您创建文本区域时,您可以使用:

JTextArea textArea = new JTextArea(5, 20);

建议文本区域的原始大小。添加超过 5 行数据时就会出现滚动条。

关于java - 滚动条没有出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44723089/

相关文章:

java - JComboBox 中的问题

java - 如何立即关闭executorservice中的所有线程?

java - 字符串是不可变的。到底是什么意思?

java - 为什么在这个例子中调用hashcode?

java - 如何绘制双阿基米德螺线?

java - 在 JComboBox 项中显示按钮

java - 来自单独线程的 GUI

java - Java 中的 Files.move(Path, Path)

Java Swing 应用程序不会退出

java - 从 MySql 数据库检索 JCombobox 值