JScrollPane将不会显示

时间:2014-04-15 19:28:48

标签: java swing

我想创建一个简单的基于GUI的'Echo'应用程序,它能够在之前的输入中向上和向下滚动。到目前为止,一切正常,除非我将JTextPane添加到JScrollPane,我丢失输入并且滚动永远不会出现。

有人能指出我正确的方向吗?

Scroll pane

这是我到目前为止的代码:

import java.awt.*;    
import javax.swing.*;

public class FileReaderGui {
    private JFrame frame;
    private JPanel inputPanel;
    private JTextField userInput;

    private JScrollPane scrollPane;
    private JTextPane display;
    JButton print;

    public void show() {
        frame = new JFrame();
        frame.setSize(400, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        buildInputPanel();
        buildDisplayPanel();
        frame.getContentPane().add(inputPanel, BorderLayout.SOUTH);
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

        frame.setVisible(true);
    }

    public void buildDisplayPanel() {
        display = new JTextPane();
            scrollPane = new JScrollPane(display);
    }

    public void buildInputPanel() {
        inputPanel = new JPanel();

        userInput = new JTextField();
        userInput.setColumns(20);
        inputPanel.add(userInput);

        print = new JButton("Print");
        print.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String current = display.getText();
                String input = userInput.getText();

                String newText = String.format("%s\n%s", current, input);
                display.setText(newText);
            }
        });
        inputPanel.add(print);
    }
}

而且,这是来电者:

public class FileReader {
    public void go() {
        FileReaderGui gui = new FileReaderGui();
        gui.show();
    }

    public static void main(String[] args) {
        new FileReader().go();
    }
}

2 个答案:

答案 0 :(得分:1)

 I'd say you should have scrollPane = new JScrollPane(display);

我也同意上述内容。

您是否重新排序代码以确保在创建滚动窗格之前创建了文本窗格?

    //scrollPane = new JScrollPane();
    //display = new JTextPane();
    //scrollPane.add(display);

    display = new JTextPane();
    scrollPane = new JScrollPane(display);

如果这样做无效,请发布包含main()方法的SSCCE来执行您的代码。

答案 1 :(得分:1)

刚才有机会测试代码,我在评论中的建议对我有用。

这里有两种选择:

public void buildDisplayPanel() {
    display = new JTextPane();
    scrollPane = new JScrollPane();
    scrollPane.getViewport().add(display);
}

或者如上所述:

public void buildDisplayPanel() {
    display = new JTextPane();
    scrollPane = new JScrollPane(display);
}

他们似乎都在我的测试中为我工作。

在我在上面的评论中链接的JavaDoc中,JScrollPane显示了相关的JViewport,可以检索并添加到(第一个示例)或在初始化时创建(第二个示例) ;您还可以使用setViewport()

中描述的JScrollPane函数