因此,我的问题是我要绘画许多图像,我无法让JSCrollpane杆出现,以便我可以看所有图像。

我的代码是这个。

您将需要图像40 x 40或获得错误。文件名是“ wall.gif”,“ defualttilebackup.gif”,“ tarne.gif”,“ ginal3.jpg”和“ defualttilebackup.gif”

import java.awt.*;
import java.util.*;
import javax.swing.*;

import java.net.*;

public class DrawImage extends JPanel {
    private Image image;
    Toolkit tk = Toolkit.getDefaultToolkit();
    private char[][] fieldMap = {
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','S','M','@','Z','#','#','#','#','#','#','#','#','#','#','#','#','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','S','M','@','Z','#','#','#','#','#','#','#','#','#','#','#','#','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','S','M','@','Z','#','#','#','#','#','#','#','#','#','#','#','#','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','S','M','@','Z','#','#','#','#','#','#','#','#','#','#','#','#','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','S','M','@','Z','#','#','#','#','#','#','#','#','#','#','#','#','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','S','M','@','Z','#','#','#','#','#','#','#','#','#','#','#','#','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','S','M','@','Z','#','#','#','#','#','#','#','#','#','#','#','#','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},
            {'$','S','M','@','Z','#','#','#','#','#','#','#','#','#','#','#','#','$'},
            {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$','$'},

        };
    public static void main(String[] args) {
        JFrame frame = new JFrame("DrawImage");
        frame.setSize(600,600);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JScrollPane(new DrawImage()));
    }

public DrawImage() {
    super();
    setVisible(true);   

}


private URL getURL(String filename) {
    URL url = null;
    try {
        url = this.getClass().getResource(filename);
    }

    catch (Exception e) { }
    return url;
}
public void paint(Graphics g) {

    //create an instance of Graphics2D
    Graphics2D g2d = (Graphics2D) g;
    //fill the background with black
    g2d.setColor(Color.GREEN);
    g2d.fillRect(0, 0, getSize().width, getSize().height);

    //draw the image
    for(int K = 0; K < this.fieldMap.length ; K = K+1){
    for(int J = 0; J < this.fieldMap[K].length; J = J + 1){
    g2d.drawImage(imagePlacer(this.fieldMap[K][J]),(J*40),(K*40), this );
        } // loop Y end
    }// loop X end
}// paint end

public Image imagePlacer(char tiles){


            try {
                switch(tiles){

                case('$'):
                    System.out.println("Wall, $");
                     image = tk.getImage(getURL("Wall.gif"));
                     break;


                case('F'):
                    System.out.println("Floor, #");
                     image = tk.getImage(getURL("DefualtTileBackup.gif"));
                     break;


                case('@'):
                    System.out.println("Character, @");
                     image = tk.getImage(getURL("Character.gif"));
                     break;


                case('M'):

                    System.out.println("Monster, !");
                     image = tk.getImage(getURL("metal3.jpg"));
                     break;

                default:
                        System.out.println("defualt,?");
                        image = tk.getImage(getURL("DefualtTileBackup.gif"));
                      break;

                    // end default
                }// end switch
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    return image;
}//end method
}// end class

该程序似乎正常工作,但我没有滚动条。

有帮助吗?

解决方案

您需要为面板提供尺寸。据我所知,面板不包含其他任何组件,因此Layoutmanager通常会尝试将其适合可用空间。

如果我正确计数,您有一个18x18的网格,因此面板的大小至少为720x720(我假设您的40x40图像有18x18瓷砖)。尝试打电话 setMinimumSize(new Dimension(720,720)) 在您的面板上。

编辑:

正如@camickr正确指出的那样, JScrollPane 将使用面板的首选尺寸。因此,您可以尝试将其外部设置为setPreferredSize(...))或,由于您已经扩展了面板,并且子类具有所需的信息,请覆盖面板的 getPreferredSize() 返回计算出的首选尺寸。

其他提示

另一个问题

1)请更改 public void paint(Graphics g) {public void paintComponent(Graphics g) {,

用于绘画 Swing JComponent 使用方法 paintComponent()

2) frame.setVisible(true); 必须是主要方法中的最后代码行

3)最好被放置 Image 作为 图标jlabel 并使用 网格布局 放在 jpanel

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top