当前位置: 代码迷 >> Java相关 >> JTextPane 获取图像焦点。大家交流学习下,该怎么解决
  详细解决方案

JTextPane 获取图像焦点。大家交流学习下,该怎么解决

热度:6189   发布时间:2013-02-25 21:49:39.0
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);    }}
------解决方案--------------------------------------------------------
帮顶。