我是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());
}
}
答案 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));
}