java - 自定义 JScrollPane。在 ScrollBar 行上添加一个组件

标签 java swing jscrollpane jlabel jscrollbar

这就是我想要实现的:

enter image description here

如您所见,水平滚动已更改,并且应在同一行中添加 JLabel("text")。目前我找到了改变水平滚动的方法(比如图像),但我找不到任何方法来添加 JLabel("text") 在它被放置在图像上的地方。

有什么建议吗?提前致谢!

import java.awt.Component;
import java.awt.Container;
import java.awt.Point;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneLayout;
import javax.swing.WindowConstants;

public class Test {

    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        jFrame.setSize(300, 300);

        JPanel myPanel = new JPanel();
        myPanel.add(new JLabel("Check Check Check Check Check Check Check Check"));
        MyScrollPane scrollPane = new MyScrollPane(myPanel);

        jFrame.add(scrollPane);
        jFrame.setVisible(true);
        jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }

}

class MyScrollPane extends JScrollPane {

    JLabel label = new JLabel("text");

    public MyScrollPane(Component view) {
        super(view, VERTICAL_SCROLLBAR_ALWAYS, HORIZONTAL_SCROLLBAR_ALWAYS);
        this.setLayout(new MyLayout(label));
        add(label);
    }
}

class MyLayout extends ScrollPaneLayout {

    JLabel label;

    public MyLayout(JLabel aLabel) {
        super();
        label = aLabel;
    }

    public void layoutContainer(Container parent) {
        super.layoutContainer(parent);

        hsb.setSize(hsb.getWidth() - 100, hsb.getHeight()); // drift
        Point location = hsb.getLocation();
        label.setLocation(location.x + 12, location.y - 12);
    }
}

最佳答案

您可能想考虑自己实现 JScrollPane。这听起来可能很可怕,但本质上,一个 JScrollPane 就是 2 个 JScrollBar 和一些调用 g.translate() 的图形逻辑。如果您使用 g.translate,您会发现滚动您自己的内容非常容易。

制作自己的组件的好处是您可以完全控制布局、显示和事件。如果我处在您的位置,这就是我会选择的路线。

关于java - 自定义 JScrollPane。在 ScrollBar 行上添加一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323021/

相关文章:

java - 有什么方法可以在 Swing 中以亚像素精度绘制线条?

java - 在 JTable 中添加带有单独工具提示的多个图标

java - 将语言环境正确设置为 JFileChooser

java - 使用递归生成所有字母组合的算法

java - 将允许和不允许的 URL 规则附加到 java 列表中

java - 如何使用 Java 进行面向 block 的磁盘 I/O?或类似的 B+ 树

java - 动态添加 JPanel 时 JScrollPane 自动向下滚动

java - JBoss eap 6 中的 JBoss-webservices.xml 结构

java - 如何在 Java Swing 中将 ScrollBar 添加到 JTextArea?

jQuery jscrollpane 轨道在底部走得太远