我无法弄清楚如何使这项工作。
我创建了一个在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();
}
}
答案 0 :(得分:1)
一些事情:
在显示您的JFrame之前移动您添加的标签,并将您的标签直接添加到contentPane而不是JFrame。
目前,您的图片覆盖了所有内容,因为图片的宽度和高度等于您的框架。我不确定你想要用矩形绘制空白图像来实现什么。你可以直接在JFrame上绘制你的矩形。
如果您打算将图像设置为背景,并且想要显示标签,则需要以不同方式进行操作。您需要使用所需图像创建JLabel并将其添加为contentPane。
希望这些指针能帮到你。
答案 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();
}
}