使用同一类的数据类型的受保护方法时出错

时间:2015-01-25 11:37:02

标签: java swing user-interface

我是Java的新手,我一直在尝试创建一个文本程序。我一直试图从JTextArea类中使用受保护的方法.getRowHeight()并在JTextArea对象上调用它(如下面的代码中所示),但我收到的错误是" getRowHeight有javax.swing.JTextArea中的受保护访问"。

我在网上读到,你只能在从类继承的类中使用受保护的方法。但我试图在一个来自该类的变量上使用它,所以我认为它会起作用?是否有一种方法可以在不必继承JTextArea类的情况下完成这项工作,因为我只需要使用此方法一次?

以下是与userText相关的代码片段:

    public class Client extends JFrame {

        private JTextArea userText;

        public Client() {
            userText = new JTextArea(); //2, 2
            userText.setLineWrap(true);     // turns on line wrapping
            userText.setWrapStyleWord(true);
            add(userText, BorderLayout.SOUTH);
            System.out.println(userText.getRowHeight());
        }
    }

1 个答案:

答案 0 :(得分:3)

您只能从属于getRowHeight()包或扩展javax.swing的类中调用JTextArea

但是,查看JTextArea的代码,看起来您可以使用此方法,这是公开的:

public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
    switch (orientation) {
    case SwingConstants.VERTICAL:
        return getRowHeight(); // this is what you need
    case SwingConstants.HORIZONTAL:
        return getColumnWidth();
    default:
        throw new IllegalArgumentException("Invalid orientation: " + orientation);
    }
}

因此,userText.getScrollableUnitIncrement(null,SwingConstants.VERTICAL,0)应返回与userText.getRowHeight()相同的输出。

在您的代码中:

    public Client() {
        userText = new JTextArea(); //2, 2
        userText.setLineWrap(true);     // turns on line wrapping
        userText.setWrapStyleWord(true);
        add(userText, BorderLayout.SOUTH);
        System.out.println(userText.getScrollableUnitIncrement(null,SwingConstants.VERTICAL,0));
    }