PaintMethod не работает должным образом. Метод Draw никогда не будет вызываться, даже если попытаться вручную [дубликат]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 PaintMethod не работает должным образом. Метод Draw никогда не будет вызываться, даже если попытаться вручную [дубликат]

Сообщение Anonymous »

Я просто пытаюсь запустить метод PaintComponent из класса LocateMap. в настоящее время он никогда не запускается.
Я пытаюсь нарисовать заданное количество изображений в jpanel на основе размеров, заданных пользователем (размеры всегда симметричны). Сначала я пытался сделать это внутри класса окна, но метод PaintComponent никогда не запускается, даже когда я запускаю его вручную. Сейчас я пытаюсь сделать это из отдельного класса LocateMap, который до сих пор не может запустить метод PaintComponent, даже когда я вручную запускаю repaint();. Вместо этого я попытался создать класс, полностью отделенный от класса Window, чтобы посмотреть, смогу ли я заставить его работать в гораздо более конкретном и меньшем масштабе. Тестовый класс автоматически запускает метод PaintComponent, даже без использования repaint(); Я понятия не имею, почему это не работает, но тест показал, что что-то мешает запуску метода PaintComponent.
публичный класс Window расширяет JPanel {
JFrame frame = new JFrame("Testing.");
Tile[] tile;
int dimensions = 50;
int tileNum[][] = new int[dimensions][dimensions];
int individualMapDimension;

String filePath = "C:\\Users\\Bmcar\\Desktop\\Coding\\TossedSouls\\Tiles";

ArrayList tileNums = new ArrayList();
ArrayList collisionStatus = new ArrayList();

LocateMap map;

public void createWindow() {

tileNums = PhotoPathCollector.getPhotoPaths(filePath, tileNums);
tile = new Tile[tileNums.size()];
setDefaultCollision();
individualMapDimension = 600 / dimensions;

map = new LocateMap(dimensions, tileNum, individualMapDimension, tileNums, collisionStatus, tile);

frame.setLayout(null);

frame.add(map.box);
map.revalidate();
map.repaint();

GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
Rectangle maxBounds = env.getMaximumWindowBounds();
frame.setBounds(maxBounds);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}

public void setDefaultCollision() {

collisionStatus.clear();

for (int i = 0; i < tileNums.size(); i++) {
collisionStatus.add("false");

}
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
Window window = new Window();
window.createWindow();
});
}


публичный класс LocateMap расширяет JPanel {
public JPanel box = new JPanel();
int dimensions;
int tileNum[][];
int individualMapDimension;
ArrayList tileNums;
ArrayList collisionStatus;

Tile[] tile;

String filePath = "C:\\Users\\Bmcar\\Desktop\\Coding\\TossedSouls\\Maps\\25x25_zeros.txt";

public LocateMap(int dimensions, int tileNum[][], int individualMapDimension, ArrayList tileNums,
ArrayList collisionStatus, Tile[] tile) {

this.dimensions = dimensions;
this.tileNum = tileNum;
this.individualMapDimension = individualMapDimension;
this.tileNums = tileNums;
this.collisionStatus = collisionStatus;
this.tile = tile;

drawMap();
}

public void drawMap() {

box.setVisible(true);
box.setLayout(new GridLayout());
box.setLocation(1200, 150);
box.setSize(600, 600);
box.setBackground(Color.white);

getAssetImage();
loadMap();
System.out.println(box.getWidth());
System.out.println(box.getHeight());
}

public void getAssetImage() {

for (int i = 0; i < tileNums.size(); i++) {
String tempFilePath;
boolean collision;

tempFilePath = tileNums.get(i);

if (collisionStatus.get(i).equals(true)) {
collision = true;
} else {
collision = false;
}
setup(i, tempFilePath, collision);
}
}

public void setup(int index, String imageName, boolean collision) {

UtilityTool uTool = new UtilityTool();

try {

tile[index] = new Tile();

BufferedImage img = ImageIO.read(new File(imageName));

if (img == null) {
throw new IOException("Image could not be read: " + imageName);
}

tile[index].image = uTool.scaleImage(img, individualMapDimension, individualMapDimension);
tile[index].collision = collision;

} catch (IOException e) {

e.printStackTrace();

}
}

public void loadMap() {

try {
InputStream is = new FileInputStream(new File(filePath));
BufferedReader br = new BufferedReader(new InputStreamReader(is));

int col = 0;
int row = 0;

while (col < dimensions && row < dimensions) {

String line = br.readLine();

while (col < dimensions) {
String numbers[] = line.split(" ");
int num = Integer.parseInt(numbers[col]);
tileNum[col][row] = num;
col++;

if (col == dimensions) {
col = 0;
row++;

if (row == dimensions) {
break;
}
}
}
}
br.close();

} catch (IOException e) {
e.printStackTrace();
}
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("g initialized");
draw(g);
}

public void draw(Graphics g) {

int mapCol = 0;
int mapRow = 0;

while (mapCol < dimensions && mapCol < dimensions) {

int currentTileNum = tileNum[mapCol][mapRow];
int mapX = mapCol * individualMapDimension + 1;
int mapY = mapRow * individualMapDimension + 1;
int maxMapX = 1800;
int maxMapY = 750;

if (mapX + individualMapDimension > 0 && mapX < maxMapX && mapY + individualMapDimension > 0
&& mapY < maxMapY) {

g.drawImage(tile[currentTileNum].image, mapX, mapY, null);
System.out.println("drawing");
}

mapCol++;

if (mapCol == dimensions) {
mapCol = 0;

mapRow++;
if (mapRow == dimensions) {
break;
}
}
}
}

публичный класс Tile {
public BufferedImage image;
public boolean collision = false;


public class PhotoPathCollector {

public static ArrayList getPhotoPaths(String folderPath, ArrayList photoPaths) {

File folder = new File(folderPath);

File[] files = folder.listFiles();

if (files != null) {
for (File file: files) {
if (file.isFile() && isPhoto(file)) {
photoPaths.add(file.getAbsolutePath());
}
}
} else {
System.out.println("The folder is empty ofdoes not exist");
}
return photoPaths;
}

public static boolean isPhoto(File file) {
String[] photoExtensions = { "jpg", "jpeg", "png", "gif", "bmp", "tiff" };
String fileName = file.getName().toLowerCase();

for (String extension: photoExtensions) {
if (fileName.endsWith("." + extension)) {
return true;
}
}
return false;
}
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... when-manua
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»