这就是我想要实现的:
如您所见,水平滚动已更改,并且应在同一行中添加 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/