2014-12-06 2 views
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(); 
 
     } 
 
     } 
 
    } 
 
    } 
 
}
나는 사전에이 시점에서 감사 것을 시도 기꺼이

+0

스윙 타이머를 사용하고 –

+0

을 추가 한 후에'repaint()'revalidate()를 호출하면 방금 t.repaint(); 및 t.revalidate(); add (comp) 후에. 배경 이미지는 여전히 유일한 이미지입니다. – Breyn

+0

FlowLayout과 같은 레이아웃을 TowerViewer.use에 추가해보십시오. setLayout 메소드 –

답변

0

t.setComponentZOrder (구성 요소, 인덱스) 프레임에 구성 요소를 추가 한 후 위의 구성 요소를 배치 추가 배경

final TowerViewer t = new TowerViewer(); //a frame with a background image already set 
 
\t \t SchellTower comp = new SchellTower(); 
 
\t \t t.add(comp); 
 
\t \t t.setComponentZOrder(comp, 0); //this line places image above background 
 
\t \t t.setVisible(true);

관련 문제