dポイントプレゼントキャンペーン実施中!

質問1
実行した時に内容が表示されたりされなかったりします、どうしてでしょうか?
いろいろ試してみましたが分かりませんでした。
質問2
JPanelではダブルバッファリング機能が備わっているみたいですが、
という事はこのソースでもそれは行なわれているのでしょうか?

以上2点と質問が多いですがよろしくお願いします。

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

public class JFrameTest extends JFrame{
 JPanelTest panel;
 Container ct;
 public static void main(String[] args){
  new JFrameTest();
 }
 public JFrameTest(){
  super("JFrameTest");
  panel = new JPanelTest();
  ct = getContentPane();
  setSize(480,480);
  setResizable(false);
  setVisible(true);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  ct.add(panel);
 }
}

class JPanelTest extends JPanel{
 public JPanelTest(){
  setSize(480,480);
 }
 public void draw(Graphics g){
  g.drawString("Test",240,240);
 }
 public void paintComponent(Graphics g){
  super.paintComponent(g);
  draw(g);
 }
}

A 回答 (1件)

こんばんは。


実行した際に表示される/されない原因は、フレームをsetVisible(true);した後に、パネルをセットしているからです。
試しにsetVisible(true);とct.add(panel);の間で、
try {
Thread.sleep(100);
}
catch(Exception e) {}
というコードを入れておくと、より高い確率で表示されないようにできると思います。
きちんと表示させたい場合は、フレームを作り終わった後(JFrameTest()コンストラクタの最後で)setVisible(true);を呼んでみてください。

ダブルバッファリングについても、
public void draw(Graphics g){
g.drawString("Test",240,240);
try {
Thread.sleep(2000);
}
catch(Exception e) {}
g.drawString("Test2",240,270);
}
という内容で確認できると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!