Почему GlassPane не работает с веб-браузером JDIC?
У меня есть следующая программа для тестирования 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, и вы можете получить их здесь.
1 ответ
Как я читал, WebBrowser является компонентом AWT, а GlassPane - компонентом Swing. Существует общая проблема смешивания тяжелых и легких компонентов. Я не думаю, что есть обходной путь в том, что вы пытаетесь сделать.
Более подробную информацию по этому вопросу можно найти в этом обсуждении.