在图形顶部显示JLabel文本

时间:2014-05-29 17:54:46

标签: java swing jframe draw jlabel

我无法弄清楚如何使这项工作。

我创建了一个在JFrame中扩展的主类。 如果我使用draw()和paint()方法运行程序来绘制某些东西,我的标签是不可见的。如果我只运行没有draw()和paint()方法的Main()类,它就可以工作。

我正在尝试使用Swing组件,但这真的很难(我是一个菜鸟T.T)。

请帮帮我吗?

我想在矩形顶部看到标签。

public class Main extends JFrame {

    JLabel label;

    public Main() {
         setSize(400, 300);
         setTitle("Title");
         setDefaultCloseOperation(EXIT_ON_CLOSE);
         setLocationRelativeTo(null);
         setVisible(true);

         label = new JLabel("Text inside");
         add(label, BorderLayout.NORTH);
   }

    public void paint(Graphics g){
        Image img = createImage(getWidth(), getHeight());
        Graphics gr = img.getGraphics();
        draw(gr);
        g.drawImage(img, 0, 0, this);
    }

    public void draw(Graphics g){
        g.drawRect(100, 100, 200, 100);
    }

    public static void main(String[] args) {
        Main start = new Main();
    }
}

2 个答案:

答案 0 :(得分:1)

一些事情:

  1. 在显示您的JFrame之前移动您添加的标签,并将您的标签直接添加到contentPane而不是JFrame。

  2. 目前,您的图片覆盖了所有内容,因为图片的宽度和高度等于您的框架。我不确定你想要用矩形绘制空白图像来实现什么。你可以直接在JFrame上绘制你的矩形。

  3. 如果您打算将图像设置为背景,并且想要显示标签,则需要以不同方式进行操作。您需要使用所需图像创建JLabel并将其添加为contentPane。

  4. 希望这些指针能帮到你。

答案 1 :(得分:1)

您的问题的解决方案非常简单。首先,您不需要创建Image并在其上使用createImage(getWidth(), getHeight())来创建图形。除此之外,当你覆盖一个方法时,你'#34;无效"它和"取代"它与你的代码。 Swing使用paint(Graphics g)方法绘制组件(如JButtons和JLabels)。 覆盖会导致你的方法被调用而不是摇摆。要修复错误,您可以在draw(Graphics g)中编写super.paint(g)来调用swing方法。所以你的班级将是这样的:

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main extends JFrame {

    JLabel label;

    public Main() {
         setSize(400, 300);
         setTitle("Title");
         setDefaultCloseOperation(EXIT_ON_CLOSE);
         setLocationRelativeTo(null);
         setVisible(true);

         label = new JLabel("Text inside");
         add(label, BorderLayout.NORTH);
   }

    public void paint(Graphics g){
        Image img = createImage(getWidth(), getHeight());
        Graphics gr = img.getGraphics();
        draw(gr);
        g.drawImage(img, 0, 0, this);
    }

    public void draw(Graphics g){
        super.paint(g);
        g.drawRect(100, 100, 200, 100);
    }

    public static void main(String[] args) {
        Main start = new Main();
    }
}