#java #swing #jframe #jpanel
#java #swing #jframe #jpanel
Вопрос:
Я пытаюсь отобразить 2 объекта Tank на JPanel, tank получает изображение с помощью ImageIcon. JPanel появляется, но мои Танки этого не делают. Я не могу найти, где я ошибаюсь. Мой друг прислал мне код, который он может отображать танки, но я не могу отобразить его на своем компьютере.
Мой класс Tank для получения изображения
public class Player extends Tank {
private Image img;
public Player(int x, int y){
super(x, y);
ImageIcon ii = new ImageIcon("src/TankD.gif");
img = ii.getImage();
}
public Image getImg() {
return img;
}
public String toString() {
return "This is player tank";
}
}
Мой класс для рисования изображения
public class DrawTanks extends JPanel{ // DRAW IMAGE
private ArrayList<Tank> list = new ArrayList<>();
private Tank a;
public DrawTanks() {
Tank t1 = new Player(100, 200);
Tank t2 = new Bot(200, 100);
a = t1;
list.add(t1);
list.add(t2);
setPreferredSize(new Dimension(100,200));
setLocation(new Point(200, 200));
}
@Override
public void paintComponent(Graphics g){
for (Tank i: list)
g.drawImage(i.getImg(), i.getX(), i.getY(), null);
}
Мой основной класс
public class Window extends JFrame{
public static void main(String[]args){
Window win = new Window();
}
public Window(){
JPanel pan = new JPanel();
DrawTanks tanks = new DrawTanks();
this.add(tanks);
this.setTitle("Tank");
this.setSize(900,900);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
}
Ответ №1:
JPanel pan = new JPanel();
DrawTanks tanks = new DrawTanks();
this.add(tanks);
Почему вы создаете объект «pan»?
По умолчанию JPanel использует потоковое описание, которое учитывает размер панелей.
В вашем классе DrawTanks вы используете:
setPreferredSize(new Dimension(100,200));
чтобы случайным образом установить размер панели.
Но затем вы создаете резервуары:
Tank t1 = new Player(100, 200);
Tank t2 = new Bot(200, 100);
где расположение каждого резервуара находится за пределами предпочтительного размера панели. Таким образом, резервуары, вероятно, окрашены, но они находятся за пределами панели, поэтому вы их не видите.
Решение:
- избавьтесь от панели «панорамирование» и просто добавьте панель DrawTanks непосредственно в фрейм
- дайте вашим чертежам разумный предпочтительный размер, чтобы все добавленные в него компоненты можно было нарисовать.