Java BoxLayout + JTextArea Wrapping

时间:2014-06-26 17:18:33

标签: java swing

我收到了这个小通知JPanel:您可以滚动浏览通知,每个通知都有自己的白框。

绿色边框是包裹在JScrollPane中的JPanel,橙色边框是JcxtAreas包装在JScrollPanes中。我试图遍历下面的代码并创建每个正确尺寸的盒子,但即使使用水平胶水,盒子也像图像一样在扩展(我在JPanel上使用boxLayout(绿色框)) 。

代码:

for (int i = 1; i <= notifications.size(); i++)
    {
        ArrayList s = notifications.get(i); // Gets the text data
        Dashboard.notificationsArea.add(new JScrollPane(new JTextArea((s.get(1).toString() + "\n" + s.get(0).toString())))); // Creates the white boxes
        Dashboard.notificationsArea.add(Box.createVerticalStrut(5));
        s.clear();
    }
    Dashboard.notificationsArea.add(Box.createVerticalGlue()); // Adds glue to fill up space (not working?)
    for (int ii = 0; ii < Dashboard.notificationsArea.getComponents().length; ii++)
    {
        if (Dashboard.notificationsArea.getComponent(ii) instanceof JScrollPane)
        { // Style white box
            ((JScrollPane)Dashboard.notificationsArea.getComponent(ii)).setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Settings.SITE_ORANGE));
            ((JTextArea) ((JScrollPane)Dashboard.notificationsArea.getComponent(ii)).getViewport().getView()).setLineWrap(true);
            ((JTextArea) ((JScrollPane)Dashboard.notificationsArea.getComponent(ii)).getViewport().getView()).setEditable(false);
            ((JTextArea) ((JScrollPane)Dashboard.notificationsArea.getComponent(ii)).getViewport().getView()).setWrapStyleWord(true);
        }
    }
    Dashboard.notificationsArea.revalidate();
}

如何使白框对齐到正确尺寸?

1 个答案:

答案 0 :(得分:1)

如此完整example所示,您可以覆盖getPreferredSize()以强制嵌套滚动窗格的特定大小。您可以在TextPanePerfectSize中的@camickr中进一步细化首选大小。

image