所以我在JLabel
内移动JPanel
,我希望JPanel
能够自动显示滚动条,引导您前往JLabel
我移出的JLabel
它
问题在于,当我设置新的JPanel
位置并且此位置超出JLabel
时,它会丢失其层次结构,因此JPanel
不再是{{1}的一部分因此,面板不会滚动,您无法看到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
答案 0 :(得分:0)
您需要做的是将JPanel
封装在JScrollPane
内并使用setPreferredSize()
请注意,滚动窗格会忽略使用setSize()
setWidth()
或setHeight()
如何设置它的示例代码如下:
public class TestFrame extends JFrame {
public TestFrame() {
setLayout(null);
setSize(500, 500);
JPanel panel = new JPanel();
panel.setBackground(Color.BLUE);
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(panel);
add(scroll);
scroll.setBounds(100, 100, 200, 200);
panel.setPreferredSize(new Dimension(800, 800));
}
public static void main(String[] args) {
TestFrame frame = new TestFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
在此示例中,JScrollPane
固定为200x200大小,而其中的JPanel
大小为800x800。您可以在移动JLabel
时动态更改此值。
另外,我想提一下,null布局不是正确的方法。在这个例子中,我希望最小化LayoutManager
和setBounds()
对JScrollPane
的基础调用的影响,以强调我试图通过的点,这是一个纯粹的内部大小变化一个JFrame
。整个def dataEntry():
x = True;
while x == True:
entData = input()
Lst = entData
if entData == "stop":
return Lst
只是一个"容器"例如。