代码之家  ›  专栏  ›  技术社区  ›  Frank

为什么GlassPane不能与JDIC的WebBrowser配合使用?

  •  2
  • Frank  · 技术社区  · 14 年前

    我有下面的程序来测试GlassPane,但它不适用于JDIC的WebBrowser。有人知道我做错了什么,以及如何让它起作用吗?

    import org.jdesktop.jdic.browser.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.net.*;
    
    public class Test_Panel extends JPanel
    {
      static WebBrowser webBrowser=new WebBrowser();
      static int W=802,H=702;
    
      Test_Panel()
      {
        setPreferredSize(new Dimension(W,H));
        setLayout(new BorderLayout());
        webBrowser.setPreferredSize(new Dimension(W,H));
    //    add("Center",webBrowser);
    
        try { webBrowser.setURL(new URL("http://www.yahoo.com")); }
        catch (MalformedURLException e) { e.printStackTrace(); }
      }
    
      static void Create_And_Show_GUI() 
      {
        JFrame frame=new JFrame("Test");
        frame.add(new Test_Panel());
        frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e)  { System.exit(0); } });
    
        new My_GlassPane(frame,W,H);
    
        frame.pack();
        frame.setBounds(0,0,W,H);
        frame.setVisible(true);
      }
    
      public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Create_And_Show_GUI(); } }); }
    }
    
    class My_GlassPane extends JComponent
    {
      JFrame f;
      int W,H,Edge,Size;
    
      public My_GlassPane(JFrame f,int W,int H)
      {
        this.f=f;
        this.W=W;
        this.H=H;
        Edge=W/100;
        Size=W/5;
        f.setGlassPane(this);
        f.getGlassPane().setVisible(true);
      }
    
      public void paint(Graphics g)
      {
        g.setColor(Color.blue);
        g.fillOval(W/6,H*18/120,W*2/3,H*2/3);
        g.setColor(Color.white);
        g.setFont(new Font("Times New Roman",0,Size));
        g.drawString("Test",W/3,H*68/120);
      }
    }
    

    如果你取消注释 add("Center",webBrowser); 你会明白我的意思——玻璃窗不会出现。为什么不呢?

    你需要有“jdic.jar”和“IeEmbed.exe”才能让它工作。我的版本是0.9.1.0,你可以得到它们 here .

    1 回复  |  直到 13 年前
        1
  •  2
  •   Alex Ntousias    14 年前

    正如我所读到的,WebBrowser是AWT组件,而GlassPane是Swing组件。有一个共同的问题 mixing heavyweight and lightweight components .我不认为你想做什么有解决办法。

    有关这一主题的更多信息,请参阅 discussion .