日期:2014-05-20  浏览次数:20974 次

JTextPane 获取图像焦点。。。大家交流学习下
JTextPane比较头痛的地方之一是,不能像文本一样获取其焦点。。。。。。 不知道QQ里边怎么编写才能同时能获取文本和图像文件的选中焦点(区域),就好像如下图片一样,能把他区域选中(即有个框框把它围住)。。。
 

   
 

  希望各位大侠、漂亮MM走过路过,不要错过,多多支持。。。。。。
   
  能有实现的思路或者方法更好!
   
  谢啦!

------解决方案--------------------
刚才突然有个想法
你不一定要 insertIcon 
你可以 insertComponent 啊
你可以把想要的效果在这个 component 上实现,
应该比 insertIcon 的简单多了
写了个测试类,你看看效果吧
你把图片换成你有的图片就应该能看出效果了

Java code
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextPane;
import javax.swing.border.AbstractBorder;

public class JQQTextPane extends JTextPane {

    public JQQTextPane() {
        super();
        initialize();
    }

    private void initialize() {
        ImageButton button = new ImageButton();
        button.setIcon(new ImageIcon("src/snow.png"));
        setText("12345");
        insertComponent(button);
    }

    class ImageButton extends JButton {
        
        private JPopupMenu popupMenu;

        public ImageButton() {
            initialize();
        }

        private void initialize() {
            setBorder(new ImageBorder());
            setContentAreaFilled(false);
            popupMenu = new JPopupMenu();
            popupMenu.add(new JMenuItem("另存为"));
            popupMenu.add(new JMenuItem("等等"));
            addMouseListener(new MouseAdapter() {
                @Override
                public void mouseReleased(MouseEvent e) {
                    if (e.isPopupTrigger()) {
                        popupMenu.show(ImageButton.this, e.getX(), e.getY());
                    }
                }
            });
        }

    }

    class ImageBorder extends AbstractBorder {

        @Override
        public void paintBorder(Component c, Graphics g, int x, int y,
                int width, int height) {
            Color oldColor = g.getColor();
            g.setColor(Color.black);
            if (c.hasFocus()) {
                g.drawRect(x, y, width - 1, height - 1);
            }
            g.setColor(oldColor);
        }

        @Override
        public Insets getBorderInsets(Component c) {
            return new Insets(1, 1, 1, 1);
        }

        @Override
        public Insets getBorderInsets(Component c, Insets insets) {
            insets.top = 1;
            insets.left = 1;
            insets.bottom = 1;
            insets.right = 1;
            return insets;
        }
    }

    public static void main(String... args) {
        JFrame frame = new JFrame();
        frame.setSize(400, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(new JQQTextPane());
        frame.setVisible(true);
    }

}

------解决方案--------------------
帮顶。