gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:07:14 25 4
gpt4 key购买 nike

这就是我想要实现的:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com