【发布时间】:2015-11-25 17:54:23
【问题描述】:
所以我将JLabel 移动到JPanel 内部,我希望JPanel 自动显示滚动条,引导您到我移出的JLabel。
问题是,当我设置新的JLabel 位置并且该位置不在JPanel 之外时,它会失去其层次结构,因此JLabel 不再是JPanel 的一部分,因此面板不滚动,您看不到JLabel。所以这是我的代码,如果你能告诉我该怎么做。谢谢。
//Panel creation
JPanel panel = new JPanel();
panel.setSize(500, 500);
panel.setAutoscrolls(true);
//Label creation
JLabel label = new JLabel();
label.setText("Hi");
label.setSize(40, 40);
//Adding Jlabel to Panel
panel.add(label);
label.setLocation(800, 200);//this invalidates inherancy
【问题讨论】:
-
这似乎不是层次问题。如果您进行调试,您可能会注意到它保留了父级。问题是它在画布之外,所以它永远不会被绘制。你想做什么?你为什么要移动
JLabel这么远?为什么JPanel不能更大,或者不能动态增长? -
问题是我不希望 JPanel 增长,这就是为什么有一个名为“autoscroll”的属性。我必须将 JLabels 放在屏幕上的许多位置,其中许多将超出屏幕分辨率,但我仍然希望能够通过使用滚动条看到它们,你明白我在做什么吗?
-
如果
JPanel封装在JScrollPane中,请不要担心它会增长。如果您增加滚动窗格的大小,它只会在您的屏幕中增长。 -
好的,我明白了,但是为什么 autoscrolls 属性不起作用,我在 C# 中做了同样的事情,这真的很简单。好的,我意识到组件总是会增长,但是为什么我需要通过将 autoscrolls 属性设置为 true 来自动更改 Jpanel 的大小。
-
我相信你误解了
setAutoscrolls()的功能。参考javadoc:JComponent Javadoc