0
여기에서 수행하려는 작업은 loadbg()
메서드 내에서 repaint()
메서드를 호출하는 것입니다. 그러나 repaint()
이 작동하지 않으며 내 이미지 (var bg
에 저장 됨)가 화면에로드되지 않습니다. 이것이 작동하지 않는 이유에 대한 제안? paint()
repaint() 메서드가 내 화면을 다시 칠하지 않습니다.
3) Thread.sleep(int)
를 사용하지 않는이 paintComponent()
대신
package core;
/*** @author Adil
* 2DPlatformer
* Written by Adil
* Built upon the player-core framework (written by Adil)
* GNU Licensed
*/
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
@SuppressWarnings("serial") //Suppress serial warning ID
public class Core extends JFrame {
public static void main(String[] args) {
DisplayMode dm = new DisplayMode(800, 600, 16,
DisplayMode.REFRESH_RATE_UNKNOWN);
//new display with parameters 800x600 + 16 bit color depth
Core i = new Core(); //new core class var
i.run(dm);
}
//variables for image loading below
public Screen s;
public Image bg;
public boolean loaded = false;
//run method below
public void run(DisplayMode dm) {
setBackground(Color.BLACK);
setForeground(Color.WHITE);
setFont(new Font("Ubuntu", Font.PLAIN, 24));
s = new Screen();
loaded = false;
try {
s.setScreenSize(dm, this);
loadbg();
try {
Thread.sleep(5000);
} catch (Exception ex) {
}
} finally {
s.RestoreScreen();
}
}
public void loadbg() {
bg = new ImageIcon(
"file:\\\\home\\adil\\Desktop\\pack_2\\bgame.jpg").getImage();
loaded = true;
s.repaint();//s is my screen object, but it won't repaint.
}
public void paint(Graphics g) {
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
}
if (loaded) {
g.drawImage(bg, 0, 0, null);
}
}
}
+1 3 좋은 지적. – camickr
나는 paintComponent()를 통해 파일이 그려지고로드되는 방식을 변경하는 것과 같은 몇 가지 다른 방법을 시도했지만 작동하지 않는 것 같습니다. – Adil
이 게시물 확인은 필요에 따라 동일합니다. http://stackoverflow.com/questions/8084115/use-of-seticon-on-jlabel-repeats-old-image/8084657#8084657 또는 http://stackoverflow.com/questions/7943584/update-jlabel-every-x-seconds-from-arraylistlist-java/7944388 # 7944388 – mKorbel