Sunの記事mixing heavy and light componentsをチェックしてください.JDICPlusは基本的にIEをあなたのアプリに埋め込んでいるので、重いコンポーネントです。
他の重量コンポーネント(AWT Buttonなど)を使用してブラウザウィンドウにボタンを配置することや、setDefaultLightWeightPopupEnabled(false)を設定してブラウザ上に配置されたJPopupMenuにボタンを配置することなどがありますそれはヘビー級です。
編集
私はヘビー級コンポーネント上のJButtonを表示するのPopupMenuを使用した例を書いた - JPopupMenuをは動作しますが、ポップアップのポップアップまたはコンポーネントがフォーカスを失ったときには、メニューを閉じるには行動が組み込まれていません。 MouseMotionListenerをヘビーウェイトコンポーネントに追加して、マウスがボタンの近くにあるバウンディングボックスに入ったときにポップアップを表示しました。ボタンが常に表示されているわけではないので、これがうまくいくかどうかはわかりません。コード例とスクリーンショットを含め
- ここ
import javax.swing.*;
import javax.swing.event.MouseInputAdapter;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.geom.Rectangle2D;
public class LightHeavy extends JFrame {
private Component heavyweightComponent;
private JPopupMenu backButton, forwardButton;
public LightHeavy() {
super("LightHeavy");
heavyweightComponent = buildHeavyweightComponent();
heavyweightComponent.setBackground(Color.ORANGE);
heavyweightComponent.setSize(640, 480);
getContentPane().add(heavyweightComponent, BorderLayout.CENTER);
ImageIcon backArrow = new ImageIcon("left_arrow_128.png");
backButton = buildPopup(backArrow);
ImageIcon forwardArrow = new ImageIcon("right_arrow_128.png");
forwardButton = buildPopup(forwardArrow);
heavyweightComponent.addMouseMotionListener(new MouseInputAdapter() {
public void mouseMoved(MouseEvent e) {
Rectangle backHotSpot = new Rectangle(0, 0, 200, 200);
Rectangle forwardHotSpot = new Rectangle(heavyweightComponent.getWidth() - 200, 0, 200, 200);
if (backHotSpot.contains(e.getPoint())) {
backButton.show(heavyweightComponent, 0, 0);
} else if (forwardHotSpot.contains(e.getPoint())) {
forwardButton.show(heavyweightComponent,
heavyweightComponent.getWidth() - forwardButton.getWidth(), 0);
}
}
});
}
private Component buildHeavyweightComponent() {
return new Canvas() {
public void paint(Graphics og) {
super.paint(og);
Graphics2D g = (Graphics2D)og;
String big = "Heavyweight Component";
g.setFont(getFont().deriveFont(20F));
Rectangle2D bigBounds = g.getFontMetrics().getStringBounds(big, g);
g.drawString(big,
(this.getWidth() - (int)bigBounds.getWidth())/2,
(this.getHeight() - (int)bigBounds.getHeight())/2);
String little = "(assume this is JDICplus)";
g.setFont(getFont().deriveFont(10F));
Rectangle2D littleBounds = g.getFontMetrics().getStringBounds(little, g);
g.drawString(little,
(this.getWidth() - (int)littleBounds.getWidth())/2,
(this.getHeight() + (int)littleBounds.getHeight())/2);
}
};
}
private JPopupMenu buildPopup(Icon icon) {
JButton button = new JButton(icon);
JPopupMenu popup = new JPopupMenu();
popup.add(button);
popup.setBorderPainted(false);
popup.setLightWeightPopupEnabled(false);
return popup;
}
public static void main(String[] args) {
JFrame f = new LightHeavy();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
が左示す上のJButtonとスクリーンショットです - あなたはまた、あなたが扱っているとして、任意のクールな透明効果を行うことができなくなりますのでご注意重量のあるコンポーネントで
screenshot of code http://i30.tinypic.com/2zsbdsl.png
あなたは私はあなたがより良いのWindows固有のソリューションを見ているだろうと思うようにWindowsの特定の技術を必要とする場合、私のJavaの経験を考えます。残念ながら、私はもっと具体的な何かを提案することはできません。 – Mark