当前位置: 首页 > 面试题库 >

固定宽度的JScrollPane

徐新荣
2023-03-14
问题内容

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

我的目标是制作带有 2个JTextPane的 垂直可滚动面板
。具有父面板固定宽度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%,并且在调整框架大小时,文本窗格将增加/缩小。



 类似资料:
  • 我是Java Swing的新手,我对下一个代码感到困惑。 null

  • 问题内容: 在无序列表中: 允许添加class或style属性,但不允许填充文本以及添加或更改标签。 该页面正在使用Courier New呈现。 目标是在跨度后排列文本。 “ OR”的理由并不重要。 懒惰的动物文字可能包含在其他元素中,但我必须仔细检查。 问题答案: ul { 就像Eoin所说的那样,您需要在“空”跨度中放置一个不间断的空格,但是您不能为内联元素分配宽度,只能填充/边距,因此您需要

  • 问题内容: 我有两个div容器。 虽然其中一个需要为特定宽度,但我需要对其进行调整,以便另一个div占用其余空间。有什么办法可以做到吗? 问题答案: HTML: CSS: 您也可以使用这样做,这通常是一种更好的方法:如何将输入元素与其标签放在同一行?

  • 问题内容: 许多人仍然使用表格来布局控件,数据等。-流行的jqGrid就是一个例子。但是,发生了一些我似乎无法理解的魔术(它的桌子大声喊叫,可能会有多少魔术?) 如何设置表的列宽并使它像jqGrid那样遵守!?如果我尝试复制此内容,即使我设置了every ,只要这些单元格之一的内容大于20px,该单元格就会展开! 有什么想法或见解吗? 问题答案: 您可以尝试对所有行使用标签管理表样式,但是您需要在

  • 问题内容: 简单方案: 我需要为设置一个固定宽度。我试过了: 也 对于 乃至 但是的宽度仍然相同。 问题答案: 对于Bootstrap 4.0: 在Bootstrap4.0.0中,您不能可靠地使用这些类(在Firefox中有效,但在Chrome中不适用)。您需要使用OhadR的答案: 对于Bootstrap 3.0: 在twitter bootstrap 3中使用:其中*是宽度的列数。 对于Boo

  • 问题内容: 我有两个div容器。 尽管一个需要为特定宽度,但我需要对其进行调整,以便另一个div占用其余空间。有什么办法可以做到吗? 问题答案: 请参阅: http : //jsfiddle.net/SpSjL/ (调整浏览器的宽度) HTML: CSS: 您也可以使用这样做,这通常是一种更好的方法:如何将输入元素与其标签放在同一行?