java - 没有滚动条的可滚动区域

标签 java swing jscrollpane jscrollbar

我需要创建一个通常会应用滚动条的区域,它必须水平滚动(内容只是更大逻辑区域的 View ),但我必须使用左右放置的一些特殊控件来控件以便滚动。

我考虑过使用绝对值(根据逻辑 View 并减去偏移量)。因此,偏移量右侧的控件将被放置为负 x 值,从而被丢弃。x 值高于宽度的控件也会被丢弃。

这是一种有效的方法吗?

最诚挚的问候 索伦

最佳答案

您可以在 Component(您较大的逻辑区域)上创建一个 JScrollPane 并删除滚动条。

然后您可以添加按钮来左右滚动。单击这些按钮后,滚动 Pane 的 View 将会移动。这是通过设置 View 的绝对位置来完成的。您可以通过首先获取 View 的绝对位置,然后递增/递减并再次设置它来使其相对。

这是一个显示较大图像的可滚动窗口的类。

public class ViewScroller {

  public ViewScroller() {
    JFrame frame = new JFrame("ViewScroller");
    final ImageIcon image = new ImageIcon("path\\to\\my\\image");
    JLabel label = new JLabel(image);
    final JScrollPane scrollPane = new JScrollPane(label);
    scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);

    JButton left = new JButton("<");
    left.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        Point p = scrollPane.getViewport().getViewPosition();
        p.x = p.x < 10 ? 0 : p.x - 10;
        scrollPane.getViewport().setViewPosition(p);
      }
    });

    JButton right = new JButton(">");
    right.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        Point p = scrollPane.getViewport().getViewPosition();
        int offset = p.x + scrollPane.getViewport().getWidth();
        p.x = offset + 10 > image.getIconWidth() ? p.x : p.x + 10;
        scrollPane.getViewport().setViewPosition(p);
      }
    });

    frame.add(right, BorderLayout.EAST);
    frame.add(left, BorderLayout.WEST);
    frame.add(scrollPane, BorderLayout.CENTER);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
    frame.setVisible(true);
  }
}

关于java - 没有滚动条的可滚动区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15832404/

相关文章:

java - 在 Swing 中更改 JScrollPane 高度

java - 我的 JList 占满了整个屏幕

java - Java Swing 文本字段中的 ANSI 颜色

Java Swing 错误渲染 GUI 元素(Windows 8.1)?

java - Swing - 在同一按钮上管理多个监听器链

java - jTextField swing 中的幽灵文本

java - 当 Layout 为 null 时,ScrollBar 不起作用

java - 在哪里可以找到可与 vlcj 2.1.0 配合使用的 "libvlc"的更新版本?

java - android 进度对话框 ->publishProgress 方法

java - 在Android应用程序中使用多个背景