簡體   English   中英

paintComponent未調用

[英]paintComponent not called

此代碼應創建一個窗口,然后在其上繪制多邊形。

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

public Drawer() repaint()似乎無能為力。

如何調用paintComponent()

您需要將Drawer組件添加到JFrame

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

無需顯式調用paintComponent 同樣,不需要在Drawer組件中調用repaint()

上面的代碼替換了您的pane JPanel因此您可能需要重新考慮框架的布局。

您創建了一個名為Drawer的新JComponent ,該JComponent 自行繪制。 因此,您必須將其實例添加到Frame中。

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

如果您不更改組件上的繪制內容,則無需手動調用repaint() 例如,當窗口大小更改時,Swing框架將為您調用它。

同樣,類名應以大寫字母開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM