Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JScrollPane中缺少JPanel的滚动条_Java_Swing - Fatal编程技术网

Java JScrollPane中缺少JPanel的滚动条

Java JScrollPane中缺少JPanel的滚动条,java,swing,Java,Swing,我有一个JFrame,可以容纳和JScrollPane。JScrollPane本身拥有一个从JPanel派生的类。我使用JPanel类在其上绘制图像和一些其他原语。不幸的是,即使JPanel扩展到JSrollPane的大小,JScrollPane的滚动条也不会出现 我创建了一些运行的测试代码: 这是主要课程: import java.awt.BorderLayout; import java.awt.Color; import javax.swing.JFrame; import javax.

我有一个JFrame,可以容纳和JScrollPane。JScrollPane本身拥有一个从JPanel派生的类。我使用JPanel类在其上绘制图像和一些其他原语。不幸的是,即使JPanel扩展到JSrollPane的大小,JScrollPane的滚动条也不会出现

我创建了一些运行的测试代码:

这是主要课程:

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JScrollPane;

class ScrolledPane extends JFrame{

private JScrollPane scrollPane; 

public ScrolledPane()
{
    setTitle( "Scrolling Pane Application" );
    setSize( 300, 200 );
    setBackground( Color.gray );

    TestPanel testPanel = new TestPanel();
    testPanel.setLayout( new BorderLayout() );

    scrollPane = new JScrollPane(testPanel);
    this.getContentPane().add(scrollPane, BorderLayout.CENTER);
}


public static void main( String args[] )
{
    // Create an instance of the test application
    ScrolledPane mainFrame  = new ScrolledPane();
    mainFrame.setVisible( true );
}
}
下面是从JPanel派生的类的代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics; 
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JPanel;

public class TestPanel extends JPanel {

private Image groundPlan;

public TestPanel(){
    super();

    this.setBackground(Color.green);
    this.setLayout(new BorderLayout());
    this.groundPlan = Toolkit.getDefaultToolkit().getImage("D:\\EclipseWorkspace\\img.png");
}


public void paint(Graphics graphics) {
    super.paint(graphics);
    if(groundPlan != null) {
        graphics.drawImage(groundPlan, 0, 0, this);
    }
}
}
有趣的是,如果我只是在JScrollpane而不是JPanel中插入带有和图像的JLabel,就会出现滚动条。此选项的代码如下所示:

public ScrolledPane() //Frame <- Scrollpane <- label <- image 
{
    setTitle( "Scrolling Pane Application" );
    setSize( 300, 200 );
    setBackground( Color.gray );

    JPanel topPanel = new JPanel();
    topPanel.setLayout( new BorderLayout() );

    Icon image = new ImageIcon("D:\\EclipseWorkspace\\img.png");
    JLabel label = new JLabel( image );

    scrollPane = new JScrollPane();
    scrollPane.getViewport().add( label );
    this.getContentPane().add(scrollPane, BorderLayout.CENTER);
}
publicScrolledPane()//Frame调用setPreferredSize(),用于JScrollPane中的面板。

1)不要覆盖
JPanel中的
paint()
。使用
paintComponent()
。2) 不要延伸框架。3) 当可以添加标签时,为什么要自定义绘制图像?