【发布时间】: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