固定宽度的JScrollPane

我是Java Swing的新手,对下一个代码感到困惑。

我的目标是制作带有

。具有父面板固定宽度70%的第一个JTextPane和具有固定宽度30%的第二个JTextPane。因为这两个JTextPane具有固定的宽度,所以它们只能在垂直方向上扩展更多文本。


我使用此解决方案,因为我只想为此2个JTextPane使用一个滚动条。

我的初始化代码:

private void initialize() {

frame = new JFrame();

frame.setBounds(100, 100, 616, 374);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.getContentPane().setLayout(new BorderLayout(0, 0));

JScrollPane scrollPane = new JScrollPane();

scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

frame.getContentPane().add(scrollPane);

JPanel panel = new JPanel();

scrollPane.setViewportView(panel);

SpringLayout sl_panel = new SpringLayout();

panel.setLayout(sl_panel);

JTextPane leftTextPane = new JTextPane();

sl_panel.putConstraint(SpringLayout.NORTH, leftTextPane, 10, SpringLayout.NORTH, panel);

sl_panel.putConstraint(SpringLayout.WEST, leftTextPane, 10, SpringLayout.WEST, panel);

panel.add(leftTextPane);

JTextPane rightTextPane = new JTextPane();

sl_panel.putConstraint(SpringLayout.NORTH, rightTextPane, 10, SpringLayout.NORTH, panel);

sl_panel.putConstraint(SpringLayout.WEST, rightTextPane, 10, SpringLayout.EAST, leftTextPane);

sl_panel.putConstraint(SpringLayout.EAST, rightTextPane, -10, SpringLayout.EAST, panel);

panel.add(rightTextPane);

scrollPane.addComponentListener(new ComponentAdapter()

{

public void componentResized(ComponentEvent evt) {

sl_panel.putConstraint(SpringLayout.EAST, leftTextPane, (int)(scrollPane.getWidth() * 0.7), SpringLayout.WEST, (Component)(evt.getSource()));

}

});

}

JTextPane(s)对SOUTH没有任何限制,因此它们可以通过这种方式长大。

问题:

  • 仅在将一些文本插入其中后,JTextPane才会调整大小。
  • 垂直滚动条不起作用。

回答:

问题在于,滚动窗格将以其首选大小显示组件,然后根据需要添加滚动条。

在您的情况下,您希望宽度受滚动窗格的视口限制。

因此,您需要Scrollable在添加到视口的组件上实现接口。该Scrollable界面将允许您强制组件宽度匹配视口的宽度,从而限制每个JTextPane的宽度,从而导致文本换行。

实现此功能的一种简单方法是使用Scrollable

Panel。此类实现Scrollable接口,并允许您使用参数覆盖Scrollable方法。

因此,基本代码为:

ScrollablePanel panel = new ScrollablePanel( new BorderLayout());

panel.setScrollableWidth( ScrollablePanel.ScrollableSizeHint.FIT );

第一个JTextPane的父面板固定宽度为70%,第二个JTextPane的固定宽度为30%

一种方法是使用JSplitPane,以便在两个文本窗格之间有一个分隔符,并且文本不会合并为一个。

JSplitPane splitPane = new JSplitPane();

splitPane.setLeftComponent(new JTextPane());

splitPane.setRightComponent(new JTextPane());

splitPane.setResizeWeight(0.7);

splitPane.setDividerLocation(.7);

然后,您只需将所有内容添加到框架中:

panel.add(splitPane);

frame.add(new JScrollPane(panel), BorderLayout.CENTER);

现在,分隔符的位置将保持在70%,并且在调整框架大小时,文本窗格将增加/缩小。

以上是 固定宽度的JScrollPane 的全部内容, 来源链接: utcz.com/qa/417257.html

回到顶部