Итак, у меня есть небольшая «игра», над которой я работаю, и у части ее есть значки, отображаемые в строках (каждая из которых jpanel). Эти компоненты Icon, которые я добавляю, отображаются идеально, когда они изолированы, однако, когда я добавляю их в каждую из своих строк, они, кажется, вообще не отображаются. Я новичок в качелях, поэтому мне интересно, не потому ли, что изображения немного меньше, чем строки, в которые они вставляются?
Вот код для иконки, которая работает нормально независимо:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import java.nio.file.Path;
public class fermiPicoNanoImage extends JPanel {
private BufferedImage image = null;
private int[] imageDims = new int[] { 83, 47};
//for testing
public String currentImage;
public fermiPicoNanoImage() throws IOException {
}
public void set(String whichImage) throws IOException, IllegalArgumentException {
whichImage = whichImage.toLowerCase();
try {
if( whichImage == "fermi" || whichImage == "f" ) {
Path filePath = Paths.get("src\\resources\\icon-fermi.png").toAbsolutePath();
image = ImageIO.read( new File( filePath.toString() ) );
currentImage = "fermi";
}
else if( whichImage == "nano" || whichImage == "n" ){
Path filePath = Paths.get("src\\resources\\icon-nano.png").toAbsolutePath();
image = ImageIO.read( new File( filePath.toString() ) );
currentImage = "nano";
}
else if( whichImage == "pico" || whichImage == "p" ) {
Path filePath = Paths.get("src\\resources\\icon-pico.png").toAbsolutePath();
image = ImageIO.read( new File( filePath.toString() ) );
currentImage = "pico";
}else {
throw new IllegalArgumentException();
}
}catch(Exception err) {
System.err.println( err.getMessage() );
err.printStackTrace();
}
this.repaint();
}
public void unset(){
image = null;
currentImage = null;
this.repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(image != null) {
g.drawImage(image, 0, 0, null);
}else if(image == null) {
g.drawImage(image, 0, 0, Color.WHITE, null);
}
}
public static void main(String[] args) throws IOException{
fermiPicoNanoImage fnpImage = new fermiPicoNanoImage();
JFrame frame = new JFrame();
frame.add(fnpImage);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
fnpImage.set("pico");
}
}
JFrame, который отображает все, здесь. И, как предлагалось в других статьях стека, я добавил компоненты до того, как для фрейма было установлено значение visible Я не уверен, если это проблема с рендерингом или с.
Теперь я не мог найти простой способ заставить основной класс работать на вас, ребята, из-за использования локальных изображений, поэтому я положил весь проект eclipse в папку на диске Google для вас. ,
https://drive.google.com/drive/folders/12n-Ze2jivwVJ1XxgQILN5zKNRfZNJ6Z5?usp=sharing
Любые предложения о том, что мне нужно, чтобы получить компонент для рендеринга, очень помогли бы. спасибо!