Java 将JScrollPane添加到JFrame/JPanel
我看了很多问题和网站,但找不到答案。 我有一个JPanel。我想添加一个滚动条,所以我想我应该使用JscrollpaneJava 将JScrollPane添加到JFrame/JPanel,java,swing,jscrollpane,Java,Swing,Jscrollpane,我看了很多问题和网站,但找不到答案。 我有一个JPanel。我想添加一个滚动条,所以我想我应该使用Jscrollpane public class TheFrame extends JFrame { public ThePanel canvas; public TheFrame() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); //------
public class TheFrame extends JFrame {
public ThePanel canvas;
public TheFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
//-------------------------------------
JScrollPane scroll = new JScrollPane(canvas);
scroll.setViewportBorder(new LineBorder(Color.RED));
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
add(scroll, BorderLayout.SOUTH);
//-------------------------------------------------
canvas = new ThePanel();
setSize(700, 400);
this.add(canvas, BorderLayout.CENTER);
setVisible(true);
}
此时,卷轴刚好出现在底部。边界显示它只是底部的一个小区域。我试图将Jpanel放入Jscrollpane中。因此,边界是围绕整个应用程序区域的。该面板扩展了JPanel。感谢您的帮助。将画布添加到滚动,并将滚动添加到
此
。JScrollPane包装组件,它不会神奇地将自己添加到组件中
例如:
JFrame frame = new JFrame();
JPanel pane = new JPanel();
JScrollPane scroller = new JScrollPane(pane);
frame.add(BorderLayout.CENTER, scroller);
scroller.setWheelScrollingEnabled(true);
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
frame.setVisible(true);
有几个问题:
public class TheFrame extends JFrame {
public ThePanel canvas;
public TheFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
//-------------------------------------
JScrollPane scroll = new JScrollPane(canvas);
scroll.setViewportBorder(new LineBorder(Color.RED));
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
add(scroll, BorderLayout.SOUTH);
//-------------------------------------------------
canvas = new ThePanel();
setSize(700, 400);
this.add(canvas, BorderLayout.CENTER);
setVisible(true);
}
守则的结构应为:
canvas = new ThePanel();
JScrollPane scrollPane = new JScrollPane( canvas );
add(scrollPane, BorderLayout.CENTER);
setVisible( true );
也就是说,您将画布添加到滚动窗格,将滚动窗格添加到框架。谢谢您的回复。好的,我添加了scroll.add(canvas);但这会导致可怕的nullpointerexception…@robertM,
我添加了scroll.add(canvas)代码>否,您从不将组件直接添加到滚动窗格。您可以将组件添加到scrollpane的视口中,或者使用组件作为参数创建scrollpane,scrollpane将为您将其添加到视口中。您能给我举个例子吗,我对您的意思感到困惑。谢谢。@robertM我加了一个例子。它实际上是这样工作的,没有什么意义。谢谢你的回复。似乎JPanel和JScrollbar仍然是分开的。。。。我需要将画布添加到JscrollBar中。我需要将画布添加到JscrollBar中
-不需要。我给了你需要的密码。当添加到滚动窗格的面板的首选大小大于滚动窗格时,滚动条将自动显示。如果没有向面板添加任何组件,则没有理由显示滚动条。如果正在进行自定义绘制,则需要重写类的getPreferredSize()
方法以返回面板的大小。