我正在尝试使用 Java 进行 GUI 编程,并想在 Jpanel 中绘制一个矩形。代码没有给出任何错误,但我无法在 GUI 中获得矩形。有人可以告诉我下面的代码中缺少什么吗?我相信这很简单,所以请保持温和。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HelloWorldGUI2 {
private static class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
private static class RectDraw extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(230,80,10,10);
g.setColor(Color.RED);
g.fillRect(230,80,10,10);
}
}
public static void main(String[] args) {
JPanel content = new JPanel();
RectDraw newrect= new RectDraw();
JButton okButton= new JButton("OK");
JButton clearButton= new JButton("Clear");
ButtonHandler listener= new ButtonHandler();
okButton.addActionListener(listener);
clearButton.addActionListener(listener);
content.add(okButton);
content.add(clearButton);
content.add(newrect);
JFrame window = new JFrame("GUI Test");
window.setContentPane(content);
window.setSize(250,100);
window.setLocation(100,100);
window.setVisible(true);
}
}
最佳答案
您的 newrect RectDraw 的大小可能会非常小,可能是 [0, 0],因为它已使用 JPanel 添加到 FlowLayout 并且没有设置 preferredSize。考虑覆盖它的 getPreferredSize()
方法并返回一个合适的 Dimension 以便可以看到它的绘图。
private static class RectDraw extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(230,80,10,10);
g.setColor(Color.RED);
g.fillRect(230,80,10,10);
}
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H); // appropriate constants
}
}
此外,
paintComponent
方法应该被保护,而不是公开- 不要忘记在您的方法覆盖之前使用
@Override
。 - 目标是在 main 方法中减少很多代码,在“实例”世界而不是静态世界中增加代码。
- 注意您的代码格式。糟糕的代码格式,尤其是误导性缩进,会导致愚蠢的错误。
关于java - 在Jpanel中绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18877882/