Мне нужно создать симулятор с графическим интерфейсом, и для этого мне нужно использовать пользовательские изображения. Я потратил более 2 часов, пытаясь понять, как использовать несколько экземпляров нескольких разных изображений и добавлять их все на дисплей, но мне пока не удалось заставить это работать. Ниже я публикую классы в том виде, в каком они уже были изменены, но в процессе я пробовал много разных реализаций. Я знаю, что мой код, вероятно, испорчен в процессе, но даже после того, как я начал все сначала, я не смог найти решение.
Концепция проста: у меня будет симулятор ликерного завода, и мне нужно смоделировать конкретную конфигурацию, визуализированную на следующем изображении: (это не окончательная визуализация)
До сих пор я просто пытался добавить бункеры (большие вещи: P). Ниже следует мой класс LiqPlantSim, который в конечном итоге станет обработчиком графического интерфейса симулятора. Со временем появится еще один класс, где будут располагаться кнопки, как панель управления симулятором.
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
public class LiqPlantSim extends JFrame{
public static Silo silo,silo2,silo3,silo4;
public LiqPlantSim(){
super("Liq Plant Simulator");
this.setFont(new Font("Helvetica", Font.PLAIN, 14));
this.setBackground(Color.red);
silo = new Silo(160,0);
this.add(silo);
silo2 = new Silo(440,0);
this.add(silo2);
silo3 = new Silo(160,310);
this.add(silo3);
silo4 = new Silo(440,310);
this.add(silo4);
this.setSize(800,600);
this.setLocation(100,100);
this.setVisible(true);
this.toFront();
this.setResizable(false);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
Здесь следует мой класс Silo.
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class Silo extends Component{
BufferedImage img;
int x,y;
public Silo(int x,int y) {
this.x=x;
this.y=y;
try {
img = ImageIO.read(new File("img/EmptySilo.png"));
}
catch (IOException e) {
System.out.println("ERROR");
}
}
public void paint(Graphics g) {
g.drawImage(img, x, y, null);
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(100,100);
}
else {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
}
Просто для справки, вот моя основная функция, в которой я пытаюсь создать экземпляр LiqPlantSim, который в конечном итоге будет единственным симулятором; появится еще одно окно с кнопками для управления симулятором.
public class Simulator {
public static void main(String [] args){
LiqPlantSim sim = new LiqPlantSim();
}
}
Я добавляю файл Silo для тех, кто нуждается.