【问题标题】:Scroll visible content in JPanel在 JPanel 中滚动可见内容
【发布时间】:2018-01-16 12:18:39
【问题描述】:

如何移动JPanel 的可见部分?我的意思是我有一组可以动态创建和关闭的选项卡(类似于浏览器选项卡),并且在某些时候它们可能太多而不可见,所以我想添加按钮来左右移动视图.我曾想过用setHorizontalScrollBarPolicy=HORIZONTAL_SCROLLBAR_AS_NEEDED 添加JScrollPane,但结果非常难看……滚动。如何只创建按钮来操作面板的可见部分?

负责标签的代码大致如下:

private JPanel tabsPane;

private JComponent createItemsPane() {
        tabsPane = new JPanel();
        tabsPane.setOpaque(false);
        tabsPane.setLayout(new BoxLayout(tabsPane, BoxLayout.X_AXIS));
        return tabsPane;
    }

public void addTab(TabCaption item) {
        tabsPane.add(item);
    }

或者,我想移动更改可见部分,以便始终显示选定的选项卡...

【问题讨论】:

  • 你知道JTabbedPane吗? (但不确定如何处理“溢出”标签)
  • 我在现有项目中使用了其他一些实现,所以它可能太冒险了...我想过用JScrollPane 包装它,但滚动条看起来很丑。
  • 刚刚检查:JTabbedPane 将“堆叠”选项卡,即如果它们不适合一行,则创建多行选项卡。
  • "..但是滚动条看起来很丑。" 使用哪个 PLAF?我不喜欢 Metal 有很多原因,一般设置 System PLAF。
  • @AndrewThompson 我不认为这是滚动条的外观,而是标签栏中有一个滚动条根本这一事实很难看。

标签: java swing jpanel


【解决方案1】:

如果您不想显示滚动条,您可以相应地使用vsbhsbPolicy。然后,添加一堆按钮用于操作JScrollPaneJViewPort

JPanel comp = new JPanel();
comp.setLayout(new GridLayout(1, 20));
for (int i = 0; i < 20; i++) {
    comp.add(new JLabel(String.format("  %d", i)));
}

JScrollPane scroll = new JScrollPane(comp, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
BiConsumer<Integer, Integer> setview = (x, y) -> {
    Point p = scroll.getViewport().getViewPosition();
    scroll.getViewport().setViewPosition(new Point(p.x + x, p.y + y));
};
JButton left = new JButton("<");
left.addActionListener(e -> setview.accept(-10, 0));
JButton right = new JButton(">");
right.addActionListener(e -> setview.accept(+10, 0));

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(scroll, BorderLayout.CENTER);
frame.add(right, BorderLayout.EAST);
frame.add(left, BorderLayout.WEST);
frame.pack();
frame.setVisible(true);

框架以足够大的尺寸开始,但如果您缩小窗口,您可以使用按钮进行滚动。您可能还想根据当前视口禁用或隐藏按钮。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-15
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多