gpt4 book ai didi

java - 固定宽度的 JScrollPane

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:23:13 26 4
gpt4 key购买 nike

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

我的目标是制作垂直滚动面板,其中包含2 JTextPane(s)。第一个 JTextPane 固定宽度为父面板的 70%,第二个 JTextPane 固定宽度为 30%。因为两个 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 仅在向其中插入一些文本后才调整大小。
  • 垂直滚动条不起作用。

最佳答案

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

在您的情况下,您希望宽度受滚动 Pane 视口(viewport)的限制。

因此您需要在添加到视口(viewport)的组件上实现Scrollable 接口(interface)。 Scrollable 接口(interface)将允许您强制组件宽度与视口(viewport)的宽度相匹配,这反过来会限制每个 JTextPane 的宽度,导致文本换行。

实现此功能的一种简单方法是使用 Scrollable Panel .此类实现了 Scrollable 接口(interface),并允许您使用参数覆盖 Scrollable 方法。

所以基本代码是:

ScrollablePanel panel = new ScrollablePanel( new BorderLayout());
panel.setScrollableWidth( ScrollablePanel.ScrollableSizeHint.FIT );

The first JTextPane with fixed width 70 % of parent panel and the second JTextPane with fixed width 30 %

执行此操作的一种方法可能是使用 JSplitPane,以便在两个文本 Pane 之间有一个分隔线,并且文本不会合并为一个。

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%,文本 Pane 将随着框架的大小调整而增大/缩小。

关于java - 固定宽度的 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36163364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com