홈>
따라서 게임을 만들고 있는데 다른 모든 클래스가 JFrame을 사용하므로 애플릿에서 JFrame으로 전환하고 싶습니다. 그러나 이해하지 못하는 런타임 오류가 계속 발생합니다.
extends Applet
라고 표시된 부분을 대체하려고 시도했습니다.
배경, 움직임, 말 그대로 전체 게임과 같이 게임에 관한 모든 것을 포함하는 JFrame을 만드는 또 다른 클래스를 만드는 것뿐만 아니라 'JFrame을 확장합니다'
이 클래스는 클래스 중 하나이며, 나머지 게임을 포함하는 JFrame을 선언합니다.
public class SpaceGame{
JFrame frame = new JFrame("Space Shooter");
AlienAttack alienAttack = new AlienAttack();
public SpaceGame(){
frame.setBounds(320, 25, 1000, 650);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(alienAttack);
}
}
위에 보이는 AlienAttack 클래스는 다음과 같습니다.
public class AlienAttack extends JFrame implements KeyListener, Runnable
{
double xVel; double yVel; final double SPEED = 0.02;
Thread thread;
int direction;
double x, y;
final double FRICTION = 0.98;
boolean upAccel, downAccel, leftAccel, rightAccel;
ArrayList<Shot> shots;
ArrayList<Alien> aliens;
boolean shipActive;
public void init(){
x=475;
y=300;
direction = 1;
xVel = 0; yVel = 0;
shipActive = true;
upAccel = false; downAccel = false; leftAccel = false; rightAccel = false;
shots = new ArrayList<Shot>();
aliens = new ArrayList<Alien>();
this.addKeyListener(this);
thread = new Thread(this);
thread.start();
}
더 많은 것이 있지만 그것이 관련이 있다고 생각하는 것들입니다. BTW, 와이즈 비즈
그리고
Shot
다른 클래스는 ArrayLists의 클래스를 사용합니다.
내 오류 중 일부는 다음과 같습니다.
Alien
(이것이 주된 것입니다)
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container
그것의 절반은 lol
t java.awt.Container.checkNotAWindow(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at javax.swing.JFrame.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at SpaceGame.<init>(SpaceGame.java:11)
at TestingGrounds$SnakeHandler.actionPerformed(TestingGrounds.java:82)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
- 답변 # 1
관련 질문
- Java에서 jframe 구성 요소 간에 변수와 목록을 전달하는 방법
- java.swing에서 내 크로노미터에 대한 분 및 시간의 JLabels를 업데이트할 수 없습니다.
- java : JScrollPane은 표시되지만 스크롤 막대는 표시되지 않는 이유는 무엇입니까?
- java : 스레드 무한 루프에서 JFrame 패널 업데이트
- Java -while 루프에 있을 때 JLabel이 추가되지 않음
- java : actionPerformed 클래스 내에서 파일 생성 code를 사용할 수 있습니까?
- Java -JFrame이 닫힐 때 메시지를 인쇄하는 방법은 무엇입니까?
- java : JFrame 클래스에서 새 모양을 그리시겠습니까? [복제하다]
- java : JTextPane에서 텍스트를 어떻게 정당화합니까?
- java : JFrame은 아무 것도 변경하지 않고 다음날 비어 있습니다.
단순 :
그리고
첫 번째 JFrame에 다른 JFrame을 추가 할 수는 없습니다.
사실 : 모든 GUI 프레임 워크는 매우 복잡합니다. 결과적으로 시행 착오에 의한 프로그래밍은 합리적인 전략이 아닙니다.
그러므로 정답은 다음과 같습니다.가정할 수 있기 때문에하지 말아야합니다. 현재하고있는 일을이해하는 데 필요한 시간을 소비해야합니다.
당신의 경우 : 리서치 스윙. 오라클 튜토리얼은 좋은 출발점입니다. 간단히 말해서 : 위에서 아래로 읽으십시오. 예제 코드를 읽고 복사 한 다음 해당 작업 코드를 기반으로 실험 해보십시오. 그런 다음 Swing을 사용하여 "다리를 밟을"정도로 능숙하면 돌아와서 현재 애플릿 기반 응용 프로그램의 구조를 살펴보십시오. 배운 내용을 적용하고 Swing 응용 프로그램 내에서 재사용 할 수있는 부분을 분석하십시오.
컨텍스트에 따라, "메인"프레임 (창)을 결정한 다음 다른 것을 추가하는 방법을 알아내는 것과 같이 다소 쉬울 수 있습니다. 첫 번째 시도는 AlienAttack을 JFrame에서 JPanel로 변경하는 것에 대한 첫 번째 시도라고 생각합니다. 프레임이 아닌 프레임에패널을 추가합니다!