0
이 작업을 수행하는 데 몇 가지 방법을 시도했지만 모두 실패했습니다.프레임에 이미지가 있고 JComponent를 추가하려고합니다.
현재 JPanel을 확장하는 backViewer라는 클래스를 사용하여 이미지 세트가있는 프레임이 있습니다. 그 프레임을 가져 와서 JComponent를 그 위에 놓고 그 위에 움직일 수 있습니다. 배경 이미지가 나타나지만 JComponent, SchellTower가 위에 표시되지 않습니다.
package Graphical;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.LayoutManager;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.accessibility.*;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
import javax.swing.*;
public class TowerViewer extends JFrame {
public TowerViewer() {
//backViewer
/*public class backViewer extends JPanel {
\t @Override
\t protected void paintComponent(Graphics g){
\t \t super.paintComponents(g);
\t \t Image image = new ImageIcon("filename").getImage();
\t \t g.drawImage(image,0,0,500,690,null);
\t \t
\t }*/
setSize(500, 688);
backViewer back = new backViewer();
add(back);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Schell Tower");
}
public static void main(String args[]) {
TowerViewer t = new TowerViewer();
SchellTower comp = new SchellTower();
t.add(comp);
t.setVisible(true);
//moving the component this works on its own and seems to be running in the back ground
//but the SchellTower component isnt visible
int x = 0;
while (true) {
for (int i = 0; i <= 10; i++) {
comp.move(0, x);
t.add(comp);
x += 60;
try {
Thread.sleep(1000); //1000 milliseconds is one second.
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
try {
Thread.sleep(3000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
x -= 60;
for (int j = 0; j <= 9; j++) {
comp.move(0, x);
t.add(comp);
x -= 60;
try {
Thread.sleep(1000); //1000 milliseconds is one second.
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
}
}
스윙 타이머를 사용하고 –
을 추가 한 후에'repaint()'revalidate()를 호출하면 방금 t.repaint(); 및 t.revalidate(); add (comp) 후에. 배경 이미지는 여전히 유일한 이미지입니다. – Breyn
FlowLayout과 같은 레이아웃을 TowerViewer.use에 추가해보십시오. setLayout 메소드 –