paintComponent()方法没有绘制到JPanel

时间:2014-08-09 12:55:27

标签: java swing jframe jpanel paintcomponent

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

}

1 个答案:

答案 0 :(得分:2)

问题在于你的" Y"在CirclesPanel。元素被绘制但在框架之外,尝试减少Y,而不是肯定你会看到你的元素。

或者增加帧大小。