위의 대화식 JPanel과 배경 이미지가있는 JDialog 프레임을 만들려고합니다. 이 컨텍스트에서 JDialog는 유닛을 선택하고 이동할 수있는 '전투'필드를 나타냅니다. 게임은 우주 기반이므로 우주선의 ArrayList와 방어 할 행성 객체가있을 것입니다.여러 개의 선택 가능한 이미지 항목을 사용하여 JDialog를 생성합니다.
paintconfig를 오버라이드하여 '행성'을 나타내는 거친 원을 그리지 만 표시 할 배경 JLabel 이미지를 가져올 수 없습니다. 그런 다음 배경 JLabel을 표시 할 수는 있지만 서클을 볼 수는 없습니다. 이상적으로, 나는 원을 각 우주선 유형의 실제 이미지로 바꾸고 행성 만의 고유 이미지로 바꾸고 싶습니다. 이 방법을 사용하면 JDialog/JLayered/Customer JPanel을 사용하는 것보다 다른 방법을 사용할 수 있습니다. 나는 이것을 셀 수있는 것보다 더 많은 시간 동안 작업 해왔다.
나는 JDialog를 생성하고, JLayeredPane을 추가하고, 배경에 JLabel을 설정했다. JLabel 위에있는 JLayeredPane에 추가되는 JPanel을 확장하는 사용자 정의 클래스를 작성했습니다.이 클래스는 행성과 유닛에 대한 원을 그립니다.
나는 JPanel의를 선택하는 이유는 그래서 플레이어가 선택 (지구 자원을 추가하는) 또는 (이동 및 공격) 선박 있는지 결정하기 위해 마우스 이벤트를 확인할 수 있습니다. 나는이 간단한 확장 작성한 JPanel의 사용자 정의에 대한
:public class SectorPnl extends javax.swing.JPanel implements MouseInputListener, ActionListener {
private int circleY, circleX, circleRadius;
private Sector sector;
private Shape planetShape;
private Shape shipShape;
private Ship ship;
private Planet planet;
private Invasion inv;
private ArrayList<ShipType> shipBuild;
public SectorPnl(Sector sector, Invasion inv)
{
initComponents();
this.sector = sector;
this.inv = inv;
this.planet = sector.getPlanet();
shipBuild = new ArrayList();
Timer update = new Timer(28, this);
update.start();
if (sector.hasPlanet())
{
circleRadius = (int) sector.getPlanet().getPlanetRadius();
circleX = (int) sector.getPlanet().getPositionX();
circleY = (int) sector.getPlanet().getPositionY();
planetShape = new Ellipse2D.Double(circleX, circleY, circleRadius,
circleRadius);
}
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponents(g);
Graphics2D g2 = (Graphics2D) g;
if (planetShape != null)
{
g2.setColor(Color.red);
g2.fill(planetShape);
g2.draw(planetShape);
}
if (shipShape != null)
{
g2.setColor(Color.white);
g2.fill(shipShape);
g2.draw(shipShape);
}
}
그리고 이것은 JDialog를에 추가하는 라인입니다 :
sectorDlg.setTitle(sector.getName());
sectorDlg.setVisible(true);
sectorDlg.setSize(800,800);
SectorPnl sectorPnl = new SectorPnl(sector, inv);
sectorPnl.addMouseListener(sectorPnl);
sectorPnl.addMouseMotionListener(sectorPnl);
sectorLayer.setLayer(sectorPnl, 100);
sectorLayer.setBounds(0, 0, 800, 800);
'g3.drawImage (bgImage, 0, 0, null);은 (는)'g3이어야합니다.drawImage (bgImage, 0, 0, this); ' –
* "지금 .... 그려진 이미지 내에서 마우스 이벤트를 선택하는 방법은?"이 게시물이이 질문에 대한 답이라면 다른 질문 일 것입니다. 이 게시물이 질문에 대한 답변이 아닌 * 경우, 정보는 [질문에 편집]해야합니다 (http://stackoverflow.com/q/16248935/418556). –