无法看到我绘制的所有图像,无法让JSCrollpane上班
-
25-10-2019 - |
题
因此,我的问题是我要绘画许多图像,我无法让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()
返回计算出的首选尺寸。
不隶属于 StackOverflow