我正在尝试将 jinternal 框架添加到处于全屏独占模式的框架中。但是,当我添加它时,它会用白色填充整个屏幕。这是我的代码。
JFrame f = new JFrame();
f.setTitle("Platform Game");
f.setLocationRelativeTo(null);
f.setUndecorated(true);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
gs.setFullScreenWindow(f);
f.setVisible(true);
createFrame(f);
protected static void createFrame(JFrame f)
{
JInternalFrame frame = new JInternalFrame("Options", false, true, false, false);
frame.setVisible(true);
frame.setSize(10, 10);
frame.setLocation(10, 10);
JDesktopPane pane = new JDesktopPane();
pane.add(frame);
f.setContentPane(pane);
try
{
frame.setSelected(true);
}
catch (java.beans.PropertyVetoException e)
{
e.printStackTrace();
}
}
如果有人知道如何正确执行此操作,请发布它,或告诉我我做错了什么。
细节
操作系统:Windows 7
JDK:JDK 1.7.0_11
IDE:日食
我在 jframe 上使用面板,我正在面板上绘图
绘画代码
public void paintComponent(Graphics g)
{
super.paintComponent(g);
for(int i = 0; i<1000; i++)
g.drawImage(bi, i*bi.getWidth()-getXs(), 0, bi.getWidth(), Main.HEIGHT, null);
g.setColor(Color.WHITE);
for(int x = 0; x<Main.X_TILES; x++)
{
for(int y = 0; y<Main.Y_TILES; y++)
{
Block block = map[x][y];
if(block!=null && x*Block.WIDTH>=xs-Block.WIDTH && x*Block.WIDTH<=xs+Main.WIDTH)
g.drawImage(block.getImage(x,y), x*Block.WIDTH-getXs(), y*Block.HEIGHT, Block.WIDTH, Block.HEIGHT, null);
}
}
for(Entity entity : entities)
{
if(entity!=null && entity.getX()>=xs-Block.WIDTH && entity.getX()<=xs+Main.WIDTH)
g.drawImage(entity.getImage(), entity.getX()-getXs(), entity.getY(), entity.getWidth(), entity.getHeight(), null);
}
if(displayDebug)
{
g.drawString("Free memory "+Runtime.getRuntime().freeMemory()/1024+" KB", 10, 12);
g.drawString("Total memory "+Runtime.getRuntime().totalMemory()/1024+" KB", 10, 24);
g.drawString("Max memory "+Runtime.getRuntime().maxMemory()/1024+" KB", 10, 36);
g.drawString("X "+character.getX(), 10, 48);
g.drawString("Y "+character.getY(), 10, 60);
g.drawString("XS "+xs, 10, 72);
}
g.setColor(Color.BLACK);
g.drawString("Life "+character.getHealth(), 700, 12);
g.dispose();
}
我在全屏模式下看到了一个类似问题 JInternalFrame 的答案,说直接放在面板上,但我试过了,它仍然没有用。
编辑:当我注释掉我的绘画代码时,我将它直接添加到面板而不是它的工作,但它不会拖动,所以我的新问题是如何在完成绘画工作时让它出现。他们是一种使用绘画组件绘制组件的方法吗?
为了澄清,在没有绘画代码的情况下添加到面板时仍然无法正常工作。