当前位置: 首页 > 知识库问答 >
问题:

paintComponent()方法不绘制到JPanel

澹台胜
2023-03-14

将显示JFrame和JPanel,但paintComponent方法不在JPanel上绘制。我只看到我添加的JLabel、JTextField和JButton,而没有看到应该在JPanel上绘制的内容。

package h02;

import javax.swing.*;

public class Circles extends JFrame {

    public Circles() {

    // JFrame and its properties

    JFrame frame = new JFrame();

    frame.setSize(500,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocation(100, 100);
    frame.setTitle("Circles");
    frame.add(new CirclesPanel());
    frame.setVisible(true);

}

public static void main(String[] args) {

        new Circles();
    }

}
    package h02;

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;

    public class CirclesPanel extends JPanel implements ActionListener {

        // Fields

    private JTextField enterDiameter;
    private JButton drawButton;
    private int diameter;
    private final int Y = 470;

    // making the panel

    public CirclesPanel() {

        enterDiameter = new JTextField("100", 5);
        enterDiameter.addActionListener(this);
        drawButton = new JButton("Teken");
        drawButton.addActionListener(this);
        add(new JLabel("Diameter"));
        add(enterDiameter);
        add(drawButton);

    }

    // find the diameter

    public void findDiameter() {

        int diameterString = Integer.parseInt(enterDiameter.getText());
        diameter = diameterString;
    }

    // draw circles


    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int centre = getWidth() / 2;
        g.drawLine(30, Y, Y , Y);
        g.setColor(Color.ORANGE);
        g.fillOval(centre, Y, diameter, diameter);
        g.setColor(Color.BLACK);
        g.drawOval(centre, Y, diameter, diameter);
        g.drawOval(centre, Y, diameter / 2, diameter);
    }

    // on action performed...

    public void actionPerformed(ActionEvent e) {
        findDiameter();
        repaint();
    }

}

共有1个答案

仲孙鸿飞
2023-03-14

问题是圆圈中的“Y”。元素是绘制的,但在框架之外,尝试减少Y,你肯定会看到你的元素。

或者增加帧大小。

 类似资料:
  • 问题内容: 我正在做一项家庭作业,我应该制作一个程序,使您可以绘制自定义形状和线条,并在屏幕上移动它们。 最初,我使用公共空隙进行绘画,但是当我调用重绘时,形状会闪烁。 因此,我切换到。但是,当我尝试绘制形状时,没有任何显示。我相信这是因为它不在顶部绘画。 框架在3行中有3个面板。 我想绘制的面板自然是Draw Box面板。 这是我目前拥有的代码: 问题答案: 您的Main类扩展了JPanel,具

  • 我对用Java制作GUI是新手。据我所知,有一个名为Graphics的类负责在JPanel中绘制形状。当我的应用程序启动时,我调用paintComponent方法,该方法绘制我正在编程的游戏的棋盘,paintComponent方法接受图形g作为输入。然而,稍后,我想更新棋盘,那么当用户做点击之类的事情时,我如何告诉在游戏开始时绘制棋盘的同一个g绘制其他东西呢? 我相信这应该有一个很简单的答案。

  • 对于我的程序,我目前希望使用open按钮打开JFileChooser并选择一个图像,然后在applet左侧的JPanel上绘制它,我知道该文件正在被检索,但当我重新绘制图形上下文时,什么也没有发生。提前谢了。

  • 我是java图形的新手,很难掌握从一个方法(绘制组件())绘制所有图形的整个概念。我只是很好奇,看看我们是否可以在绘制组件之外绘制图形。这可能吗?是否可以在main方法中写一行,如:fillRect(100,100, 500,400);并让它绘制一个矩形?如果可能,是否根据Java常规? 基本上,我想问的是,你是否可以在paintComponent类之外绘制图形,这是常规的吗。

  • 问题内容: 我希望这个问题不会太笼统。我知道,要在您上进行绘制,您需要重写该方法,并将所有绘制代码​​放入该方法中。我的问题是为什么!为什么Java似乎不允许/提供使用诸如或方法的绘图?在delphi中,一切都变得如此简单。一定有一个原因我无法弄清楚。 问题答案: 那是因为这就是它的工作方式。它是以此方式设计的。但是我想你的问题是关于“为什么” 请记住,Swing大约在15年前问世。批评之一是该A