Java 如何使用“添加元素”;“绝对位置”;在jframe上?
实际上这是我的代码:Java 如何使用“添加元素”;“绝对位置”;在jframe上?,java,swing,canvas,absolute,jlayeredpane,Java,Swing,Canvas,Absolute,Jlayeredpane,实际上这是我的代码: private void createDisplay(){ frame = new JFrame(title); frame.setSize(width, height); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.setUndecorated(true); frame.setLocationRe
private void createDisplay(){
frame = new JFrame(title);
frame.setSize(width, height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setUndecorated(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
canvas = new Canvas();
canvas.setPreferredSize(new Dimension(width, height));
canvas.setMaximumSize(new Dimension(width, height));
canvas.setMinimumSize(new Dimension(width, height));
canvas.setFocusable(false);
frame.add(canvas);
frame.pack();
}
在我的屏幕上显示我的游戏(游戏在画布上绘制)。我需要在屏幕前面添加一些其他元素,例如JButtons。
我试过这样的“JLayeredPane”:
private void createDisplay(){
frame = new JFrame(title);
frame.setSize(width, height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setUndecorated(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
layeredPane = new JLayeredPane();
layeredPane.setPreferredSize(new Dimension(width, height));
//layeredPane.addMouseMotionListener((MouseMotionListener) this);
frame.add(layeredPane);
canvas = new Canvas();
canvas.setPreferredSize(new Dimension(width, height));
canvas.setMaximumSize(new Dimension(width, height));
canvas.setMinimumSize(new Dimension(width, height));
canvas.setFocusable(false);
layeredPane.add(canvas,new Integer(10));
frame.pack();
}
但是当我启动程序时,我看不到画布,只看到layeredPane://好主意?谢谢大家。
PS:如果你有其他解决方案,我很好,我只需要保留我的JPanel。移动
frame.setVisible(true);
到最后一行(在frame.pack
之后)同样,这不会像你认为的那样工作,Canvas
是一个很重的组件,不会很好地玩Swing(很轻)容器,因为它有z-排序问题…哦,当您使用诸如BufferStrategy
Thx之类的活动渲染技术时,Swing不能很好地发挥作用,但不起作用:/Ok为了避免这种情况,您有没有办法解决我的问题?要在屏幕前面的画布上放置一个JButton?我可以假设canvas
是java.aw吗如果不是,请考虑提供一个演示你的问题的代码。这不是一个代码转储,而是你正在做的一个例子,它突出了你所面临的问题。这将导致更少的混乱和更好的响应。否则你就有点麻烦了,你需要实现你自己的“按钮”。