【问题标题】:paintComponent() method not drawing to JPanelpaintComponent() 方法不绘制到 JPanel
【发布时间】:2014-10-02 20:03:57
【问题描述】:

JFrame 和 JPanel 出现了,但是 paintComponent 方法没有在 JPanel 上绘图。我只看到我添加的 JLabel、JTextField 和 JButton,但没有看到应该在 JPanel 上绘制的内容。

更新;问题已得到解答: 圆圈实际上被绘制到 JPanel 上,但我的坐标错误,所以它们被绘制在框架之外。

JFrame 类:

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();
    }

}

JPanel 类:

    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();
    }

}

【问题讨论】:

  • 如果这是我的代码/问题,我会尝试调试,方法是使用调试器或将 println 语句放入您的paintComponent 方法中以查看 Y(尽管这应该是常量),居中和直径是调用该方法的时间。
  • 你怎么一会就引用EnterDiameter,然后又引用enterDiameter? (注意大写和小写的“e”。)
  • @HovercraftFullOfEels Y = 470,center = 249,diameter = 0。我不确定为什么找不到直径。
  • Kirstoffer,这可能是@Arkanon 提到的拼写/大写问题。此外,您正在 GUI 下方绘制。
  • 尝试调整框架大小,应该会出现圆圈

标签: java swing jframe jpanel paintcomponent


【解决方案1】:

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

或者增加帧大小。

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    相关资源
    最近更新 更多