Hallo,
ich habe ein JWindow mit einem JInternalframe. Das Problem ist nun, dass ich im JWindow zeichnen möchte, und immer wenn ich im Window zeichne wird das JInternalFrame überzeichnet. Daher zeichne ich bei jedem neuzeichnen des JWindows nun auch das JInternalFrame neu, nun flckert aber alles. Kann mir irgendjemand helfen, damit ich das Flackern wegbekomme?
Hier mein Programmcode:
Die Klasse MeinWindow:
Die Klasse MyInternalFrame:
Die Klasse Rendering:
PS : Ich benutze den Vollbildmodus, da daraus später ein Spiel werden soll.
ich habe ein JWindow mit einem JInternalframe. Das Problem ist nun, dass ich im JWindow zeichnen möchte, und immer wenn ich im Window zeichne wird das JInternalFrame überzeichnet. Daher zeichne ich bei jedem neuzeichnen des JWindows nun auch das JInternalFrame neu, nun flckert aber alles. Kann mir irgendjemand helfen, damit ich das Flackern wegbekomme?
Hier mein Programmcode:
Die Klasse MeinWindow:
Java:
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferStrategy;
import javax.swing.JDesktopPane;
import javax.swing.JWindow;
public class MeinWindow extends JWindow{
public JDesktopPane d = new JDesktopPane();
static MyInternalFrame f;
BufferStrategy myStrategy;
public MeinWindow() {
setContentPane(d);
GraphicsDevice device;
device=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
device.setFullScreenWindow(this);
Rendering renderer = new Rendering(this);
createBufferStrategy(2);
myStrategy = getBufferStrategy();
renderer.start();
}
public void rendering() {
Graphics g = myStrategy.getDrawGraphics();
render(g);
g.dispose();
myStrategy.show();
}
public void render(Graphics g){
g.setColor(Color.yellow);
g.fillRect(0, 0,getWidth(),getHeight());
if(f != null){
f.repaint();
}
}
public static void main(String[] args) {
MeinWindow frame = new MeinWindow();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
frame.setLayout(new FlowLayout());
f = new MyInternalFrame();
frame.d.add(f);
}
}
Die Klasse MyInternalFrame:
Java:
import java.beans.PropertyVetoException;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
public class MyInternalFrame extends JInternalFrame {
public MyInternalFrame() {
add(new JButton("Button"));
setSize(10,10);
setVisible(true);
try {
setSelected(true);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
}
Die Klasse Rendering:
Java:
public class Rendering extends Thread {
private MeinWindow anzeige;
public Rendering(MeinWindow a){
anzeige = a;
}
public void run(){
while(true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
anzeige.rendering();
}
}
}
PS : Ich benutze den Vollbildmodus, da daraus später ein Spiel werden soll.