Heyho liebe Java Programmierer,
Ich bin immoment dabei mich mit Swing auseinander zu setzen und hab bisher ein Frame , sowie verschiedene Button & einen FPS Counter.
Klasse FRAME:
Klasse SCREEN:
Klasse KEYHANDLER:
Was genau sind jetzt meine Probleme?
eigentlich sind es gleich mehrere Baustellen:
1. Die JButton flackern - als würde man mit den Pfeiltasten andauernd über Icons gehen (es sieht aus als wären sie an und abgewählt worden)
2. Es stürzt komplett ab, sobald ich in das Frame klicke und eben nicht auf einen Button.
Hoffe mir kann jemand weiter helfen!
Ich bin immoment dabei mich mit Swing auseinander zu setzen und hab bisher ein Frame , sowie verschiedene Button & einen FPS Counter.
Klasse FRAME:
Java:
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Frame extends JFrame {
public static void main(String[] args) {
// to (run) frame when the Game is started
new Frame();
}
/** Constructor Frame */
public Frame() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Screen screen = new Screen(this);
this.add(screen);
this.setTitle("Lacritz - Tower Defense");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
// this.setSize(800, 600);
this.setSize((int) screenSize.getWidth(), (int) screenSize.getHeight());
// this.setExtendedState(MAXIMIZED_BOTH);
this.setUndecorated(true);
this.setResizable(false);
this.setVisible(true);
// this.setLocationRelativeTo(null);
}
}
Klasse SCREEN:
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.event.ActionListener;
public class Screen extends JPanel implements Runnable {
// Getting all started - init. the attributes
Thread thread = new Thread(this);
private int fps = 0;
Frame frame;
public boolean running = true;
public int scene;
private JButton startingGame = new JButton("Start Game");
private JButton options = new JButton("Options");
private JButton exit = new JButton("Exit");
/**
*
*/
private static final long serialVersionUID = 1L;
public Screen(Frame frame) {
this.frame = frame;
this.frame.addKeyListener(new KeyHandler(this));
thread.start();
}
public void paintComponent(Graphics graphic) {
graphic.clearRect(0, 0, this.frame.getWidth(), this.frame.getHeight());
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double w = screenSize.getWidth();
double h = screenSize.getHeight();
double v = w / h;
// 16:10 Resolution
// w = (w / 1.344) / 25;
// h = (h / 1.5) / 14;
startingGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
scene = 1;
startingGame.setVisible(false);
options.setVisible(false);
exit.setVisible(false);
}
});
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
running = false;
}
});
if (scene == 0) {
graphic.setColor(Color.BLACK);
graphic.fillRect(0, 0, this.frame.getWidth(),
this.frame.getHeight());
add(startingGame);
// startingGame.setVerticalTextPosition(AbstractButton.CENTER);
// startingGame.setHorizontalTextPosition(AbstractButton.LEADING); // Aendern
startingGame.setBounds((int)(w/2)-100,(int)(h/2)-75 ,200 ,50);
startingGame.setMnemonic(KeyEvent.VK_D);
startingGame.setActionCommand("Disabled");
startingGame.setPreferredSize(new Dimension(200, 50));
add(options);
// options.setVerticalTextPosition(AbstractButton.CENTER);
// options.setHorizontalTextPosition(AbstractButton.LEADING); // Aendern
options.setBounds((int)(w/2)-100,(int)(h/2)-25 ,200 ,50);
options.setMnemonic(KeyEvent.VK_D);
options.setActionCommand("Disabled");
options.setPreferredSize(new Dimension(100, 25));
add(exit);
// exit.setVerticalTextPosition(AbstractButton.CENTER);
// exit.setHorizontalTextPosition(AbstractButton.LEADING); // Aendern
exit.setBounds((int)(w/2)-100,(int)(h/2)+25 ,200 ,50);
exit.setMnemonic(KeyEvent.VK_D);
exit.setActionCommand("Disabled");
exit.setPreferredSize(new Dimension(100, 25));
} else if (scene == 1) {
graphic.setColor(Color.WHITE);
graphic.fillRect(0, 0, this.frame.getWidth(),
this.frame.getHeight());
graphic.setColor(Color.GRAY);
for (int i = 0; i < 25; i++) {
for (int ii = 0; ii < 14; ii++) {
graphic.drawRect((int) w + (i * (int) w), (int) h
+ (ii * (int) h), (int) w, (int) h);
}
}
} else {
graphic.setColor(Color.GREEN);
graphic.fillRect(0, 0, this.frame.getWidth(),
this.frame.getHeight());
}
graphic.drawString(fps + " ", 10, 10);
}
public void run() {
System.out.println("(Success) FRAME CREATED");
long lastFrame = System.currentTimeMillis();
int frames = 0;
running = true;
scene = 0;
// Game Loop
// Actually where the game is in
while (running == true) {
repaint();
frames++;
if (System.currentTimeMillis() - 1000 >= lastFrame) {
fps = frames;
frames = 0;
lastFrame = System.currentTimeMillis();
}
// maximizing the FPS
// 1 = 1000
// 2 = 500
// 4 = 250
// 8 = 125
// 16 = 62,5
try {
Thread.sleep(16);
} catch (InterruptedException error) {
error.printStackTrace();
}
}
// game stops, if running is set to false
System.exit(0);
}
public class KeyTyped {
public void keyESC() {
running = false;
}
public void keySPACE() {
scene = 1;
}
}
}
Klasse KEYHANDLER:
Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class KeyHandler implements KeyListener{
private Screen screen;
private Screen.KeyTyped keyTyped;
public KeyHandler(Screen screen){
this.screen = screen;
this.keyTyped = this.screen.new KeyTyped();
}
public void keyPressed(KeyEvent press) {
int keyCode = press.getKeyCode();
// Showing what actually is pressed - Console
System.out.println("YOU PRESSED:" + press.getKeyCode());
if (keyCode == 27){
this.keyTyped.keyESC();
}
if (keyCode == 32){
this.keyTyped.keySPACE();
}
}
public void keyReleased(KeyEvent press) {
}
public void keyTyped(KeyEvent press) {
}
}
Was genau sind jetzt meine Probleme?
eigentlich sind es gleich mehrere Baustellen:
1. Die JButton flackern - als würde man mit den Pfeiltasten andauernd über Icons gehen (es sieht aus als wären sie an und abgewählt worden)
2. Es stürzt komplett ab, sobald ich in das Frame klicke und eben nicht auf einen Button.
Hoffe mir kann jemand weiter helfen!
Zuletzt bearbeitet: