Я просто пытаюсь запустить метод 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
PaintMethod не работает должным образом. Метод Draw никогда не будет вызываться, даже если попытаться вручную [дубликат] ⇐ JAVA
Программисты JAVA общаются здесь
1720579239
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;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78728044/paintmethod-not-working-as-intended-draw-method-will-never-call-even-when-manua[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия