我正在尝试使用java swing GUI,同时我正在为我正在创建的游戏绘制2Dgraphics。我的目标是在图形顶部下拉。每当我尝试按下按钮或在秋千下降时我都看不到它。我相信这是关于摇摆元素的2Dgrahpics。
这是我的课程声明和我的JFrame创作:
public class Main extends JFrame{
public Main(){
setBackground(Color.LIGHT_GRAY);
setSize(1000,600);
setTitle("Scaling Tests");
setDefaultCloseOperation(3);
setVisible(true);
这就是我的双缓冲和绘制图形的方式:
public void paint(Graphics g){
dbImage = createImage(1000, 600);
dbg = dbImage.getGraphics();
draw(dbg);
g.drawImage(dbImage, 0, 0, this.getWidth(), this.getHeight() , this);
repaint();
}
public void draw(Graphics g){
g.setColor(Color.red);
g.fillRect(100, 100, 200, 200);
我试图在构造函数和draw方法中绘制这样的JLabel:
JLabel mylabel = new JLabel();
mylabel.setText("Hello World!");
mylabel.setBounds(0, 0, 1280, 720);
mylabel.setVisible(true); //unnecessary
this.add(mylabel);
这没效果。无论我把代码放在哪里,我都看不到Jlabel。我认为图形覆盖有一些问题。
答案 0 :(得分:5)
您的问题是您正在破坏绘画链,因为您没有调用super.paint(),因此没有绘制任何子组件。
但是你不应该覆盖JFrame上的paint()。
相反,通过覆盖paintComopnent()
上的JPanel
来完成自定义绘制,然后将面板添加到框架中。并且不要忘记调用super.paintComponent(g)作为方法中的第一个语句。
然后您可以将JLabel
添加到面板。
此外,从未在绘画方法中调用repaint()。这将导致无限循环。
答案 1 :(得分:0)
这是有效的 - 除了标签是你必须使用一些布局管理器来处理它的所有背景
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame{
public Main(){
setBackground(Color.LIGHT_GRAY);
setSize(1000,600);
setTitle("Scaling Tests");
setDefaultCloseOperation(3);
JLabel mylabel = new JLabel();
mylabel.setText("Hello World!");
mylabel.setBounds(0, 0, 1280, 720);
add(mylabel);
setVisible(true);
}
public static void main(String args[]) {
Main m=new Main();
}
public void paint(Graphics g){
Image dbImage = createImage(1000, 600);
Graphics dbg = dbImage.getGraphics();
draw(dbg);
g.drawImage(dbImage, 0, 0, this.getWidth(), this.getHeight() , this);
}
public void draw(Graphics g){
g.setColor(Color.red);
g.fillRect(100, 100, 200, 200);
}
}