目标JTextArea在Hashmap样式循环中的JScrollPane中包装

时间:2014-06-22 22:57:08

标签: java swing jscrollpane jtextarea

鉴于我有一个包含在JScrollPane中的JTextArea,以及一个充满JScrollPanes的Hashmap:

protected static JTextArea jta1 = new JTextArea();
protected static JScrollPane jts1 = new JScrollPane(jta1, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

public static Hashtable<Integer, JScrollPane> textAreas = new Hashtable<Integer, JScrollPane>();

textAreas.put(1, jts1);

如何在一个只包含JScrollPanes的hashmap中,在同一个for循环中设置内部JTextArea和外部JScrollPane的样式?:

for (JScrollPane item : textAreas.values()) {
        item.setPreferredSize(new Dimension(540, 200)); // This is JScrollPane
        item.setLineWrap(true); // This is the JTextArea attribute <----
        item.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Settings.SITE_ORANGE));  // This is JScrollPane      
    } 

我对JTextarea包含的外部JScrollPane没有问题,但是item.setLineWrap(true)特别适用于内部JTextArea,那么我该如何选择呢? 您无法从JTextArea ((JTextArea) item).setLineWrap(true);投射,先尝试过。

1 个答案:

答案 0 :(得分:2)

你必须在JScrollPane上使用getViewport()方法访问视口,然后在返回的JViewport上调用getView()方法,返回的Component应该是你的JTextArea,你需要将组件转换为JTextArea才能调用setLineWrap在它上面

((JTextArea)item.getViewport()。getView())。setLineWrap(true)