在JApplet/Swing中使用图形和小部件进行绘图



基本上我有一个JApplet,它试图用图形进行绘制(即g.drawOval(10,110100100),还包括JCompotents(即JButton)。实际情况是,重新喷漆可能会变得非常古怪。

有时图形会覆盖小部件,反之亦然。它不可靠,并导致不可预测的行为。

(按钮也总是在这些图形的顶部)

我曾经尝试过覆盖或手动绘制组件、更改订单等,但我认为我在这里缺少了一些非常基本的东西。有人有模板或正确的方式来使用g.drawXXX和JCompotents吗?

再次,按照我的建议,

一定不要直接在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的《肮脏的富有客户》。你不会后悔购买的!这是我拥有的最好的Java书之一。

相关内容

  • 没有找到相关文章

最新更新