java - 在Jpanel中绘制矩形

标签 java swing

我正在尝试使用 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/

相关文章:

java - 程序不增加循环中的变量

java - 无法使用log4j创建日志文件

java - 在 JDialog 上使用滚动条 Swing TextArea

java - JLabel 不透明和 alpha

java - 更改 Swing 应用程序上所有按钮的光标

java - 如何停止在 GUI 模式下执行的 jmeter 卡住

java - 调用方法 "SecurityUtils.getSubject();"是否总是会命中 redis 数据库?

java - 为什么 Hibernate 每次请求都创建新的数据库连接?

java - 由于 Maven 依赖关系,Map、List 不是通用的且 isEmpty 函数未定义

java - 使用java中菜单栏的选项加载多个文件