首页 / JAVA / java-涵盖图形内容的窗口框架
java-涵盖图形内容的窗口框架
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-涵盖图形内容的窗口框架,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3272字,纯文字阅读大概需要5分钟。
内容图文
![java-涵盖图形内容的窗口框架](/upload/InfoBanner/zyjiaocheng/675/ffaafc6363744c7fbecef1d258a62dfe.jpg)
这是我在这里的第一篇文章,我有一个看起来真的很笨拙的问题,但这在过去一个小时左右一直困扰着我.
我正在制作一个带有JPanel的简单JFrame,但是Windows 7边框似乎阻止了我对面板各部分的查看.例如,如果我在坐标0,0处绘制一个小正方形,它将不会出现,并且我怀疑它在窗口框架的后面.
我尝试弄乱pack,setsize,setpreferred大小,setresizable和不同的布局,但是我无法显示前20个像素左右!
这就是我所拥有的:
public RedSunGame() {
super("Red Sun");
rs = new JPanel(new BorderLayout(), true);
rs.setPreferredSize(new Dimension(WIDTH, HEIGHT));
add(rs, "Center");
setPreferredSize(new Dimension(WIDTH, HEIGHT));
pack();
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
编辑:
感谢您的所有答复,对于缺少信息表示抱歉:)
我正在使用在书中看到的双重缓冲策略. gameRender和paintScreen在标准游戏循环中.我的RedSunGame类扩展了JFrame.除上述内容外,您可能还会要求提供所有相关代码:
private static final int WIDTH = 500;
private static final int HEIGHT = 500;
private JPanel rs;
private Graphics2D g2d;
private Image dbImage;
private void gameRender() {
//create buffer
if (dbImage == null){
dbImage = createImage(WIDTH, HEIGHT);
g2d = (Graphics2D)dbImage.getGraphics();
}
//clear screen
g2d.setColor(Color.white);
g2d.fillRect(0, 0, WIDTH, HEIGHT);
g2d.setColor(Color.blue);
g2d.setFont(font);
g2d.drawString("FPS: " + FPS, 0, HEIGHT);
g2d.fillRect(30, 30, 10, 10);
}
private void paintScreen() {
Graphics g;
try {
g = getGraphics();
if ((g != null) && (dbImage != null))
g.drawImage(dbImage, 0, 0, null);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
catch (Exception e)
{ System.out.println("Graphics context error: " + e); }
}
使用我当前的设置,它看起来像这样.
http://i.imgur.com/qaabC.png
如果我有g2d.fillRect(30,30,10,10),就会发生这种情况,唯一的变化是坐标30,30而不是0,0.它绝对隐藏在顶部边界之后.
http://i.imgur.com/uzfFe.png
另外,将其设置为BorderLayout.CENTER在这些情况下似乎都没有什么不同.
(对不起,它不会让新用户发布图片)
编辑:
我想到了.我直接绘制到JFrame. @Guillaume Polet我明白了为什么您不应该覆盖JFrames的paint方法,因为它绘制到框架而不是应该实际显示内容的面板!谢谢
解决方法:
这是一个示例代码,显示了如何实现您的目标.尝试找出与您的代码之间的差异,以找出错误所在:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class RedSunGame {
private static final int SQUARE_SIZE = 20;
private JPanel rs;
private JFrame frame;
private void initUI() {
frame = new JFrame("Red Sun");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
rs = new JPanel(new BorderLayout()) {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.YELLOW);
g.fillRect(0, 0, SQUARE_SIZE, SQUARE_SIZE);
}
@Override
public Dimension getPreferredSize() {
Dimension preferredSize = super.getPreferredSize();
// Let's make sure that we have at least our little square size.
preferredSize.width = Math.max(preferredSize.width, SQUARE_SIZE);
preferredSize.height = Math.max(preferredSize.height, SQUARE_SIZE);
return preferredSize;
}
};
frame.add(rs);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
RedSunGame redSunGame = new RedSunGame();
redSunGame.initUI();
}
});
}
}
内容总结
以上是互联网集市为您收集整理的java-涵盖图形内容的窗口框架全部内容,希望文章能够帮你解决java-涵盖图形内容的窗口框架所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。