【问题标题】:Swing flow layout break element in scrollable JPanel可滚动 JPanel 中的摆动流布局中断元素
【发布时间】:2017-02-22 18:52:57
【问题描述】:

我正在尝试将多张 JPanel 卡片放入我的主面板中。如果新卡面板不适合我希望它被放置在下一行。在下图中,您会看到我所有的卡片面板都向右移动,如果我设置 HORIZONTAL_SCROLLBAR_ALWAYS 水平滚动就可以了。所以在这里我希望主面板的每一行都有 4 个卡片面板,以便垂直滚动工作。

public class PanelTraining extends JPanel{
    private static final long serialVersionUID = 1L;


    public PanelTraining(List<FccMeta> ffcms) {
        super(new BorderLayout()); // set layout to absolute
        setPreferredSize(new Dimension(880, 580));
        setBorder(new LineBorder(Color.decode("#A11E1E"),1, true));

        JPanel pnlChart = new JPanel();

        pnlChart.setPreferredSize(new Dimension(860, 180));
        pnlChart.setBackground(Color.YELLOW);
        add(pnlChart, BorderLayout.NORTH);

        JPanel pnlTrSet = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
        //pnlTrSet.setSize(860, 380);

        for (FccMeta fccMeta : ffcms) {
            JPanel pnlCard = new MyCustomPanelCard();
            pnlTrSet.add(pnlCard);
        }


        JScrollPane scroll = new JScrollPane(pnlTrSet);
        //scroll.setPreferredSize(new Dimension(860, 380));
        scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        add(scroll, BorderLayout.CENTER);

    }
}

EDIT 根据下面给出的答案。我通过this Class 更改了我的实现

ScrollablePanel pnlTrSet = new ScrollablePanel(new FlowLayout());
pnlTrSet.setScrollableWidth( ScrollablePanel.ScrollableSizeHint.FIT );
pnlTrSet.setScrollableBlockIncrement(
       ScrollablePanel.VERTICAL, ScrollablePanel.IncrementType.PIXELS, 230);

【问题讨论】:

标签: java swing user-interface awt layout-manager


【解决方案1】:

您需要实现面板的Scrollable 接口以将宽度固定为滚动面板视口的大小。

基本上你需要重写getScrollableTracksViewportWidth() 方法来返回“true”。

一个简单的方法是使用Scrollable Panel。它有一个方法可以让你控制这个属性。

编辑:

以上只会阻止水平滚动条出现。但是 FlowLayout 将继续在一行中显示所有按钮,因为面板的首选尺寸计算仍然不正确。

要让按钮换行,您必须将面板的 FlowLayout 替换为 Wrap LayoutWrap Layout 将正确重新计算面板的首选高度,以便组件可以换行并出现垂直滚动条。

【讨论】:

  • 你能详细说明你的答案吗?我的面板的可滚动界面是什么意思
  • @gabby, 1) 阅读 API 以获取有关 Scrollable 接口的更多信息。当有人建议你不知道的类/接口时,这是第一个开始的地方。 2) 在论坛/网络上搜索使用建议方法的示例。 3) 阅读 Implementing a Scrolling-Savvy Client 上的 Swing 教程部分。
  • 是的,我做到了。我根据您提供的结果更新了我的问题。
  • @gabby,只是在更新我的答案。滚动条仍然不起作用,因为面板的首选尺寸计算不正确。
猜你喜欢
  • 1970-01-01
  • 2013-10-09
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 2014-05-12
相关资源
最近更新 更多