1

私はこの描画プログラムプロジェクトに取り組んでいました(もっと、それを拡張するようなものです)、そして私は厄介なバグに遭遇しました。BorderLayoutの南にあるJPanelにJLabelを追加しましたが、JPanelの南に追加されないだけでなく、JPanelに何かをペイントするとぼやけます。私が理解していないのは、なぜこれら2つのことが起こっているのかということです。

クラスのコード:

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Painter extends JPanel{

private int pointCount = 0; // count the number of points

// array of 10000 java.awt.Point references
private Point[] points = new Point[10000];
JLabel myCount = new JLabel();

// set up GUI and register mouse event handler
public Painter() {

    myCount.setText("Points so far: " + pointCount);
    add(myCount, BorderLayout.SOUTH);

    // handle frame mouse motion event
    addMouseMotionListener(
            new MouseMotionAdapter() { // anonymous inner class
                public void mouseDragged(MouseEvent event) {
                    if (pointCount < points.length) {
                        points[pointCount] = event.getPoint(); // find the point
                        ++pointCount; // increment number of points in the array
                        repaint();
                        myCount.setText("Points so far: " + pointCount);
                    } // end if     
            } // end of mouseDragged method
        } // end anonymous inner class
    ); // end of addMouseMotionListener
}// end Painter constructor

// draw ovals in a 4-by-4 bounding box at specified locations on window
public void paintComponent(Graphics g) {
    super.paintComponents(g); // clears drawing area

    // draw all points in the array
    for (int i = 0; i < pointCount; i++) {
        g.fillOval(points[i].x, points[i].y, 12, 12);
    } // end for loop
} // end method paintComponent
} // end of Painter class
4

1 に答える 1

3

最初の問題は setLayout(new BorderLayout); を呼び出すことで解決できます。コンストラクタの最初の行として

2 番目の問題は、paintComponents から「s」を削除し、paintComponent を呼び出すだけで解決できます。

于 2012-06-06T15:41:17.977 に答える