Java - 使用GUI和2Dgraphics

时间:2016-01-05 17:50:32

标签: java swing user-interface graphics 2d

我正在尝试使用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。我认为图形覆盖有一些问题。

2 个答案:

答案 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);

}

}