работая над двумя JPanels одновременно в одном JFrame
Я новичок в java swing. И при попытке с графикой я застрял с этим. Я не мог найти правильное решение в сети. Так что я думал о публикации здесь.
так что теперь давайте перейдем к моей проблеме. Сначала я объясню, что я пытаюсь сделать. И тогда я объясню о моей проблеме.
Я пытаюсь заставить два шара двигаться в разных направлениях одновременно в JFrame. (По сути, я думал о том, чтобы играть в цепную реакцию, в которой, когда вы нажимаете на заполненную коробку, шары будут двигаться одновременно в разных направлениях).
Здесь я создаю два (на данный момент) JPanels для двух шаров, которые я пытаюсь переместить на JFrame ОДНОВРЕМЕННО.
вот код, который я опробовал,
public class chainGraphics расширяет JPanel реализует Runnable {
int oldX,oldY,newX,newY;
int changeX,changeY;
Container myPane;
public chainGraphics(int oldX,int oldY,int newX,int newY,Container myPane) {
// TODO Auto-generated constructor stub
this.myPane=myPane;
this.oldX=oldX;
this.oldY=oldY;
this.newX=newX;
this.newY=newY;
myPane.add(this);
}
public void paintComponent(Graphics g) {
//super.paintComponent(g);
System.out.println("hj");
g.drawOval(changeX,changeY, 40, 40);
}
@Override
public void run() {
System.out.println("hii");
changeX =oldX;
changeY = oldY;
if((newY-oldY)==0){
if(oldX<newX){
for(int i=oldX;i<newX;i++){
System.out.println("hii123");
changeX = i;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}
}
else {
for(int i=oldX;i>newX;i--){
changeX=i;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}
}
}
if((newX-oldX)==0){
if(oldY<newY){
for(int i=oldY;i<newY;i++){
changeY=i;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
}
}
else {
for(int i=oldY;i>newY;i--){
changeY=i;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
}
}
}
}
public static void main(String[] args) {
JFrame gui = new JFrame();
gui.setTitle("Chain Reaction ;-) ");
gui.setSize(650,650);
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setLocationRelativeTo(null);
gui.setVisible(true);
Container Pane = gui.getContentPane();
chainGraphics g = new chainGraphics(100,200,300,200,Pane);
chainGraphics g1 = new chainGraphics(200,100,200,300,Pane);
Thread t1 = new Thread(g);
t1.start();
Thread t2 = new Thread(g1);
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Здесь я не видел двух движущихся одновременно шаров. Есть проблема, я думаю. я мог видеть шар, движущийся только в направлении у. (но я хочу, чтобы оба шара двигались одновременно, так как я создаю две нити)
И я также заметил, что если я сначала создаю объект g1, а затем объект g, то шар движется только в направлении x.
Я думаю, что Jframe позволяет работать только с 1 JPanel одновременно. (И я добавляю JPanel в конструктор Frame тщательно). так что когда-нибудь JPanel добавляется в последнюю очередь к кадру, это позволяет работать над ним. это так ? Если да, что мне теперь делать. Мое требование - я хочу перемещать шары одновременно в разных направлениях. Благодарю.