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); }}
------解决方案--------------------------------------------------------
帮顶。