Итак, я создаю игру, в которой мне понадобится несколько методов, которые могут выводить текст (в JFrame) или отображать изображения. Я создал GraphicsEngine, который имеет метод paintComponent, но дело в том, что это будет выполняться путем добавления его в JFrame, а не через мои вызовы, и я не могу вызывать другие методы GraphicsEngine, потому что для этого требуется объект Graphics2D... которого у меня не будет, когда я вызову методы. Как мне создать кучу методов, которые могут добавлять что-то в JFrame, не имея собственного компонента paintComponent? Пожалуйста помоги.
Вот мой GraphicsEngine, если кому-то это покажется актуальным.
import javax.swing.JComponent;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class GraphicsEngine extends JComponent
{
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
BufferedImage img = null;
try {
img = ImageIO.read(new File("Splash.jpg"));
} catch (IOException e) {
}
g2.drawImage(img, 0, 0, null);
}
public void textOut (Graphics2D g2, String text){
for(char c : text.toCharArray()){
System.out.print(c); //I want to be able to print this to JFrame through g2's text printing methods.
delay(30);
}
}
}
img = ImageIO.read(new File("Splash.jpg"));
) Загрузите его один раз во время инициализации и отрисуйте несколько раз. - person Erwin Bolwidt   schedule 08.03.2015g2.drawImage(img, 0, 0, null);
aJComponent
являетсяImageObserver
, поэтому должно бытьg2.drawImage(img, 0, 0, this);
. 2) Не игнорируйте исключения, это аукнется вам сзади. 3) Учитывая, что изображение может бытьnull
, если оно не загружено, лучше проверитьif (img==null) {..
перед рисованием. 4) Используйте нотацию@Override
для переопределенных методов. 5) Всегда сначала вызывайте методsuper.paintComponent(g);
. 6) Учитывая, чтоSplash.jpg
, очевидно, является ресурсом приложения, он будет находиться внутри Jar и недоступен какFile
во время выполнения. Загрузите его по URL. - person Andrew Thompson   schedule 08.03.2015