1

基本的に、私はグラフィックス (つまり、g.drawOval(10,10,100,100)) を描画しようとし、JCompotents (つまり、JButton) も含めようとする JApplet を持っています。

グラフィックがウィジェットの上に描画される場合や、その逆の場合があります。信頼性が低く、予期しない動作につながります。

(ボタンも常にそれらのグラフィックスの上にあります)

コンポーネントをオーバーライドしたり手動で描画したり、順序を変更したりして遊んでみましたが、ここで非常に基本的なものが欠けていると思います。g.drawXXX と JCompotents の両方を使用するテンプレートまたは正しい方法を持っている人はいますか?

4

1 に答える 1

3

繰り返しますが、私が推奨したことに従ってください。

JApplet で直接描画するのではなく、JPanel またはその contentPane (JPanel) で描画するようにしてください。この JPanel の paintComponent(...) メソッドで必ず描画してください。

そしてそれは動作します:

import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.InvocationTargetException;

import javax.swing.*;

public class Test2 extends JApplet {


   public void init() {
      try {
         SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
               Test2BPanel panel = new Test2BPanel();
               setContentPane(panel);
            }
         });
      } catch (InvocationTargetException e) {
         e.printStackTrace();
      } catch (InterruptedException e) {
         e.printStackTrace();
      }

   }


}

class Test2BPanel extends JPanel {
   private String[] backgroundImageFileNames = { "test", "test", "test" };

   private JButton refreshButton;
   private JComboBox backgroundList;

   public Test2BPanel() {

      setBackground(Color.white);

      setLayout(new FlowLayout());

      refreshButton = new JButton("replant new forest");
      refreshButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {

         }

      });
      add(refreshButton);

      backgroundList = new JComboBox(backgroundImageFileNames);
      backgroundList.setSelectedIndex(2);
      add(backgroundList);
   }

   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      paintIt(g);
   }

   public void paintIt(Graphics g) {
      for (int i = 0; i < 200; i++) {
         for (int j = 0; j < 200; j++) {
            g.setColor(Color.red);
            g.drawOval(10 * i, j, 10, 10);
         }
      }
   }
}

また、基本的なペイントのチュートリアルと高度なペイントのチュートリアルを含む Swing のペイントのチュートリアルも確認してください。

これに関する優れた書籍については、 Chet Haase と Romain Guy によるFilthy Rich Clientsの購入を検討してください。あなたは購入を後悔しません!これは、私が所有する最高の Java 書籍の 1 つです。

于 2012-07-11T02:11:39.467 に答える