タイトルの通り、描画メソッドのprint(Graphics)が呼ばれない理由がわかりません。
下記プログラムを実行するとウィンドウ内が緑色(バックグラウンドカラー)に塗られ、コンソールに「bbbb」とだけ出力されます。
ウィンドウ内がバックグラウンドで塗られていることから描画対象のJPanelは正しく置かれています。
描画系メソッドは@Overrideをつけているので、オーバーライドする名前を間違えているわけでもなさそうです。(名前が違えばエラーが出ますよね?)
再描画テスト用にクリックでrepaint()も呼んでみましたが、「aaaa」「bbbb」までしか出力されません。
「cccc」以降が呼ばれていないので、repaintメソッドで止まっているようですが、原因は何が考えられるでしょう。
環境としてはmac、eclipseです。
java
1import java.awt.Color; 2import java.awt.Graphics; 3import java.awt.event.MouseEvent; 4import java.awt.event.MouseListener; 5import javax.swing.JFrame; 6import javax.swing.JPanel; 7 8public class SeedFillTest extends JPanel{ 9 10 public static void main(String[] args) { 11 new SeedFillTest(); 12 } 13 14 public SeedFillTest() { 15 JFrame frame = new JFrame(); 16 frame.setSize(600,500); 17 frame.add(this); 18 frame.setVisible(true); 19 20 setBackground(Color.green); 21 addMouseListener( 22 new MouseListener() { 23 @Override 24 public void mouseClicked(MouseEvent e) { 25 System.out.println("aaaa"); 26 repaint(); 27 } 28 29 @Override public void mousePressed(MouseEvent e) {} 30 @Override public void mouseReleased(MouseEvent e) {} 31 @Override public void mouseEntered(MouseEvent e) {} 32 @Override public void mouseExited(MouseEvent e) {} 33 } 34 ); 35 } 36 37 @Override 38 public void repaint() { 39 System.out.println("bbbb"); 40 super.repaint(); 41 } 42 43 @Override 44 public void update(Graphics g) { 45 System.out.println("cccc"); 46 super.update(g); 47 } 48 49 @Override 50 public void print(Graphics g) { 51 System.out.println("dddd"); 52 super.paint(g); 53 } 54 55 @Override 56 public void printComponent(Graphics g) { 57 System.out.println("eeee"); 58 super.paintComponent(g); 59 } 60} 61
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/27 10:05