【问题标题】:Set JScrollPane to JTextArea in different class file在不同的类文件中将 JScrollPane 设置为 JTextArea
【发布时间】:2015-05-10 22:01:51
【问题描述】:

基本上我有其中有框架的主类,并为 tabbedPane 调用“mainTabbedScreens”类,而这个类又调用“analysisPage”类,其中我有 JTextArea,我想为其设置 JScrollPane。

我已经研究了两个示例 Example:1Example:2 来解决我的问题,但我不能,请告诉我哪里出错了!

分析类:(到目前为止我都试过了!)

public class analysisPage {

    private JPanel panel1;
    private JTextField txtGraphPage;
    private JTextArea textArea;
    private Component scroll;

    public analysisPage() {
        createPageScreen1();
    }

    // function for panel - page - 1
    private void createPageScreen1() {
        panel1 = new JPanel();
        panel1.setLayout(null);


    //for title label
    JLabel lblProcessingData = new JLabel("Processing data............................................");
    lblProcessingData.setBounds(350, 5, 415, 10);
    panel1.add(lblProcessingData);


        String fileName = "loadFiles\\testFile.txt";


        try {
            textArea = new JTextArea();
            textArea.setBounds(350, 50, 400, 378);
            textArea.setBorder (new TitledBorder (new EtchedBorder(), fileName));
            textArea.setLineWrap(true);
            textArea.setEditable(false);
            textArea.setVisible(true);

            FileReader reader = new FileReader(fileName);
        BufferedReader br = new BufferedReader(reader);
        textArea.read(br, null);
        br.close();
        textArea.requestFocus();

        JScrollPane scroll = new JScrollPane(textArea);
        scroll.setVerticalScrollBarPolicy (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        } catch (Exception e) {

            e.printStackTrace();
        }

        //panel1.add(scroll);
        panel1.add(textArea);
        panel1.setVisible(true);
//this is where trying to set the scroll for text area;


    }


    public JPanel getPanel1() {
        return panel1;
    }

}

如果我这样做

panel1.add(scroll);

得到一个 NullPointerException 错误,但如果我这样做了

panel1.add(textArea);

我没有收到错误消息,而是 scroll is not set。请给我指路,谢谢。

【问题讨论】:

  • 1) 避免使用空布局——这会将您的代码标记为新手代码,因为如果您有任何 Swing 经验,您会发现空布局在除您的平台之外的所有平台上看起来都很糟糕拥有,导致难以升级和增强的刚性 GUI。相反,学习使用和使用布局管理器,因为它们将使您的编码更容易,并且您的 GUI 功能更多。 2)同样避免设置任何组件的边界。 3) JTextAreas 尤其如此。对此调用 setBounds 几乎可以保证 JScrollPane 无法使用它。
  • 感谢 cmets,将尝试按照您的建议更改布局!

标签: java swing jscrollpane jtextarea


【解决方案1】:

你正在添加

private Component scroll; 未初始化为至 panel1。

尝试以这种方式更改您的代码:

    try {
        ...

        JScrollPane scroll1 = new JScrollPane(textArea);
        scroll1.setVerticalScrollBarPolicy (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        panel1.add(scroll1);
    } catch (Exception e) {
        e.printStackTrace();
    }

或者,如果您希望滚动成为 analysisPage 类的成员:

    try {
        ...

        scroll = new JScrollPane(textArea);
        scroll.setVerticalScrollBarPolicy (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        panel1.add(scroll);
    } catch (Exception e) {
        e.printStackTrace();
    }

无论如何,请遵守代码约定以使您的代码更具可读性。您的analysisPage 应命名为AnalysisPage

正如 @Hovercraft Full Of Eels 所暗示的,除了 NullPointerException 之外,您的代码中还有其他几个问题,请阅读他的评论。它将帮助您更好地理解 Swing 并编写更好的代码。

【讨论】:

  • @Hovercraft Full Of Eels 你是对的......我不知道如何在不更改完整代码的情况下解决问题。已编辑。
猜你喜欢
  • 2011-06-05
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多