Я делаю простую java-игру и пытаюсь реализовать пусковую установку в начале игры.Ошибка при создании пусковой установки игры
Например, JFrame
с кнопкой в нем, которая запускает мое приложение при его нажатии.
То, что я пытаюсь сделать, это основной вызов метода отдельный класс, который открывает JFrame
, и ActionListener
для JButton
, который вызывает new Cliker();
при вызове.
Однако, когда new Cliker();
вызывается вне метода main
, он открывает игру JFrame
, но не JPanel
.
Почему эта ошибка происходит, и как я могу ее исправить? Я относительно новичок в программировании, поэтому заранее извиняюсь за любые неясные моменты по этому вопросу или моей программе.
Я бы с благодарностью высказал вам свою помощь. Если вам нужны еще какие-то классы, чтобы помочь ответить на мой вопрос, просто спросите, или если у вас есть другие вопросы, не стесняйтесь, дайте мне знать.
package com.Cliker;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import com.Cliker.Accessories.Music;
public class Cliker extends JFrame {
private static final long serialVersionUID = 1L;
int score = 0;
JButton ball = new JButton(new ImageIcon("res/textures/ball/ball.PNG"));
JFrame gameFrame = new JFrame("Cliker v1.0");
public static void main(String[] args){
new Cliker();
}
public Cliker() {
gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameFrame.add(new MyPanel());
gameFrame.pack();
gameFrame.setVisible(true);
gameFrame.setResizable(false);
gameFrame.setLocationRelativeTo(null);
ClikerGame play = new ClikerGame();
play.run(this);
}
class MyPanel extends JPanel implements MouseListener {
private static final long serialVersionUID = 1L;
public MyPanel() {
setBackground(Color.CYAN);
ball.addMouseListener(new MouseListener() {
@Override
public void mousePressed(MouseEvent e) {
if (e.getSource() == ball) {
score++;
Music.music(4);
repaint();
}
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
});
ball.setBorder(null);
add(ball);
addMouseListener(this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(new Font("Fixedsys", Font.BOLD, 30));
g.setColor(Color.BLACK);
g.drawString(String.valueOf(score), getWidth()/2, 40);
}
public Dimension getPreferredSize() {
return new Dimension(700, 500);
}
@Override
public void mousePressed(MouseEvent e) {
if (e.getSource() == this) {
this.setBackground(Color.RED);
gameFrame.setVisible(false);
ClikerEndGame sendData = new ClikerEndGame();
try {
sendData.finish(score);
} catch (Exception e1) {
JOptionPane.showInputDialog(null,"The game has encountered an error. Error code: 001");
e1.printStackTrace();
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
}
}
Следующий класс
package com.Cliker;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import com.Cliker.Accessories.Music;
public class ClikerGame implements Runnable {
private int x, y, xa = 2, ya = 2;
public void run(Cliker panel) {
JButton ball = panel.ball;
Music.music(2);
while (true) {
try {
x += xa;
y += ya;
if (x < 0 || x > 700 - 20) {
Music.music(1);
xa = -xa;
}
else if (y < 0 || y > 500 - 20){
Music.music(1);
ya = -ya;
}
Thread.sleep(15);
ball.setBounds(x,y,30,30);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Error 1");
}
}
}
public void run() {
this.run();
}
}
* "Тем не менее, когда новый Cliker(), вызывается за пределами основного метода, открывает игру JFrame, но не JPanel "* - Потому что это то, что делает конструктор' Clicker', он создает новый 'JFrame' ... – MadProgrammer