1

このコードは、ウィンドウを作成し、その上にポリゴンを描画する必要があります。

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

public class gui extends JComponent {
  gui(String title){
    JPanel pane = new JPanel();
    JFrame frame = new JFrame(title);
    Container con = frame.getContentPane();
    con.add(pane);
    frame.setBounds(100,100,500,500);
    frame.setVisible(true);
  }
  public static void main(String[] args){
    gui myGUI = new gui("test");
    new Drawer();
    repaint();
  }
}
class Drawer extends JComponent {
  public Drawer() {
    System.out.println("drawer");
    repaint();
  }
  public void paintComponent(Graphics g) {
    super.paintComponent(g);     
    System.out.println("drawerpC");  

    Point p1 = new Point(400, 100);
    Point p2 = new Point(100, 300);
    Point p3 = new Point(200, 400);

    int[] xs = { p1.x, p2.x, p3.x };
    int[] ys = { p1.y, p2.y, p3.y };
    Polygon triangle = new Polygon(xs, ys, xs.length);

    g.setColor(new Color(255,255,255));
    g.fillPolygon(triangle);
  }  
}

ウィンドウは作成されますが、paintComponent()呼び出されません。

repaint()ではpublic Drawer()何もしないようです。

どのように電話しpaintComponent()ますか?

4

2 に答える 2

3

Drawerコンポーネントをに追加する必要がありますJFrame

Drawer drawer = new Drawer();
con.add(drawer);

を明示的に呼び出す必要はありませんpaintComponentrepaint()また、コンポーネントの呼び出しDrawerは不要です。

上記はあなたを置き換えるpane JPanelので、フレームのレイアウトを再考することをお勧めします.

于 2012-10-14T10:38:49.057 に答える
3

JComponentという名前の新しい を作成しました。これは、それ自体Drawerで描画を行います。したがって、そのインスタンスをフレームに追加する必要があります。

Drawer drawer = new Drawer();
con.add(drawer);

コンポーネントに描画されているものを変更しない場合は、手動で呼び出すrepaint()必要はありません。たとえば、ウィンドウサイズが変更された場合などに、Swing フレームワークがそれを呼び出します。

また、クラス名は大文字で始める必要があります。

于 2012-10-14T10:39:26.637 に答える