import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;public class TestIcon_f3 {
private static ImagePanel jp;
private static JPanel jp_word;
private JButton jb_changed;
private JButton jb_unchange;
private JFrame jf;
private JPanel panel;
private JButton jb_basedate;
private JButton jb_change_1;
private static Canvas canvas;
// private static Shell shell;
// private static WordWindow4Browse wordOLE;
private static OleFrame oleFrame1;
private static OleClientSite clientSite;
// private static final Display display = Display.getDefault(); TestIcon_f3() {
jf = new JFrame();
jf.getContentPane().setLayout(null);
jp = new ImagePanel("F:/image/backgroup_1.PNG");
jp.setBounds(0, 0, 1257, 642);
jp.setLayout(null);
jf.getContentPane().add(jp); jb_changed = new JButton(new ImageIcon("F:/image/b2.PNG"));
jb_changed.setBounds(79, 533, 82, 23);
jp.add(jb_changed); jb_unchange = new JButton(new ImageIcon("F:/image/b3.PNG"));
jb_unchange.setBounds(79, 609, 82, 23);
jp.add(jb_unchange); jb_change_1 = new JButton(new ImageIcon("F:/image/b2.PNG"));
jb_change_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateUI_changed();
}
});
jb_change_1.setBounds(79, 130, 82, 23); jb_basedate = new JButton(new ImageIcon("F:/image/b1.PNG"));
jb_basedate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
jb_basedate.setBounds(79, 64, 82, 23);
// jp.add(jb_basedate); panel = new ImagePanel("F:/image/book.PNG"); panel.setLayout(null);
panel.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
jp_word=new JPanel();
canvas = new Canvas() ;
jf.setLayout(new BorderLayout());
jf.remove(jp);
jf.setSize(1024, 780);
jf.setLocation(350, 300);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(jp_word);
jp_word.setLayout(new BorderLayout());
jp_word.add(canvas, BorderLayout.CENTER);
jp_word.getParent().add(canvas, BorderLayout.CENTER);
 final Display display = new Display();
  // 利用SWT_AWT.new_Shell 交互
  final Shell shell = SWT_AWT.new_Shell(display, canvas);
  shell.setLayout(new FillLayout());
  shell.layout();
  shell.setSize(1024, 780);
  initGUI(shell);
  shell.open();
  display.dispose();
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch()) {
    display.sleep();
   }
  }
} }); jb_changed.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
updateUI_changed();
} });
jb_unchange.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
updateUI_unchange();
}
});
jb_basedate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
updateUI_basedate();
} });
panel.setBounds(60, 224, 123, 161);
jp.add(panel); JLabel lblNewLabel_4 = new JLabel("New label");
lblNewLabel_4.setBounds(42, 30, 54, 15);
panel.add(lblNewLabel_4); ImagePanel imagePanel = new ImagePanel("F:/image/book.PNG");
imagePanel.setLayout(null);
imagePanel.setBounds(219, 224, 123, 161);
jp.add(imagePanel); jf.setSize(1600, 900);
jf.setLocation(350, 300);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} private void updateUI_unchange() {
jp.setImg(new ImageIcon("F:/image/backgroup_3.PNG").getImage());
jp.remove(jb_unchange);
jp.remove(jb_changed);
jp.add(jb_change_1);
jp.add(jb_basedate);
jp.remove(panel);
jp.updateUI();
jp.repaint();
jp.invalidate();
jp.validate();
} private void updateUI_basedate() {
jp.setImg(new ImageIcon("F:/image/backgroup_1.PNG").getImage());
jp.add(panel);
jp.remove(jb_change_1);
jp.remove(jb_basedate);
jp.add(jb_changed);
jp.add(jb_unchange);
jp.updateUI();
jp.repaint();
jp.invalidate();
jp.validate(); } private void updateUI_changed() {
// jf.remove(jp);
jp.setImg(new ImageIcon("F:/image/backgroup_2.PNG").getImage());
jp.remove(jb_changed);
jp.remove(panel);
jp.remove(jb_change_1);
jp.add(jb_basedate);
jp.add(jb_unchange);
jp.updateUI();
jp.repaint();
jp.invalidate();
jp.validate();
}
 private static void initGUI(Shell shell) {
   oleFrame1 = new OleFrame(shell, SWT.NONE);
   try {
   clientSite = new OleClientSite(oleFrame1, SWT.NULL, new File("F:/image/abc.doc"));
        System.out.println(clientSite.getProgramID() + ", " + clientSite);
        clientSite.doVerb(OLE.OLEIVERB_SHOW);
   } catch (org.eclipse.swt.SWTException e) {
    String str = "Create OleClientSite Error" + e.toString();
    System.out.println(str);
    return;
   }
   shell.layout();
  }  public static void main(String[] args) {
new TestIcon_f3();
}
}当点击panel走监听的时候 就会碰到界面卡死的现象,请高手帮忙指点下
谢谢谢谢!!

解决方案 »

  1.   

    主要就是看panel监听的这个方法。。
      

  2.   

    你这代码无法编译嘛。总的说,你在SWT中用Swing,又用OLE,这些都揉在一起,比较悬的。
    特别是SWT和JFrame都开了事件环,应该有问题。
      

  3.   


    哥们,这个网站你在看下 
    http://topic.csdn.net/u/20120106/09/61ab7092-2f49-4640-a9b0-47b38543d3dc.html
    这个代码我简化了 你指点下
      

  4.   

    问题已经解决 
    在 
    http://topic.csdn.net/u/20120106/09/61ab7092-2f49-4640-a9b0-47b38543d3dc.html
    里面 谢谢马工!!