我有一个框架中有一个图像,我试图在它上面添加一个JComponent

时间:2014-12-06 18:48:24

标签: java eclipse

我尝试了几种不同的方法,但都失败了。

目前我有一个框架,其中包含一个图像集,使用一个名为backViewer的类来扩展JPanel。我想采用那个框架并在其上放置一个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 {
	@Override
	protected void paintComponent(Graphics g){
		super.paintComponents(g);
		Image image = new ImageIcon("filename").getImage();
		g.drawImage(image,0,0,500,690,null);
		
	}*/
    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();
        }
      }
    }
  }
}

我愿意在此时尝试任何事情,先谢谢

1 个答案:

答案 0 :(得分:0)

在将组件添加到框架后添加t.setComponentZOrder(组件,索引)将组件放置在背景上方

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