栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在JPanel中显示的矩形区域内的图像上方写文字

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在JPanel中显示的矩形区域内的图像上方写文字

基本概念类似于任何常规的Swing形式。您只需要添加一些
额外的工作即可将它们组合在一起。

您需要决定的第一件事是是否需要多线支持?

下面的示例简单地使用JLayeredPane,提供自由布局和
使用自定义Jtextarea提供可编辑字段。

整洁的是,调整大小
和“可重新编辑性”一样,多数情况下都由您来照顾,只需单击文本,您就会明白我的
意思。

在此处输入图片说明

我将重新定位由您决定;)

public class TextOverImage {    public static void main(String[] args) {        new TextOverImage();    }    public TextOverImage() {        EventQueue.invokeLater(new Runnable() { @Override public void run() {     try {         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());     } catch (ClassNotFoundException ex) {     } catch (InstantiationException ex) {     } catch (IllegalAccessException ex) {     } catch (UnsupportedLookAndFeelException ex) {     }     Jframe frame = new Jframe("Test");     frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);     frame.setLayout(new BorderLayout());     frame.add(new ImagePane());     frame.pack();     frame.setLocationRelativeTo(null);     frame.setVisible(true); }        });    }    public class ImagePane extends JLayeredPane {        private BufferedImage background;        public ImagePane() { setFocusable(true); try {     background = ImageIO.read(new File("Your/image/here")); } catch (Exception e) {     e.printStackTrace(); } addMouseListener(new MouseAdapter() {     @Override     public void mouseClicked(MouseEvent e) {         Component focusOwner = FocusManager.getCurrentKeyboardFocusManager().getFocusOwner();         if (!(focusOwner instanceof OverlayEditor)) {  OverlayEditor field = new OverlayEditor();  field.setLocation(e.getPoint());  add(field);  invalidate();  repaint();  field.requestFocusInWindow();         } else {  requestFocusInWindow();         }     } }); InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW); ActionMap am = getActionMap(); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel"); am.put("cancel", new AbstractAction() {     @Override     public void actionPerformed(ActionEvent e) {         Component focusOwner = FocusManager.getCurrentKeyboardFocusManager().getFocusOwner();         if (focusOwner instanceof OverlayEditor) {  remove(focusOwner);  invalidate();  repaint();         }     } });        }        @Override        public Dimension getPreferredSize() { return new Dimension(400, 400);        }        @Override        protected void paintComponent(Graphics g) { super.paintComponent(g); if (background != null) {     int x = (getWidth() - background.getWidth());     int y = (getHeight() - background.getHeight());     g.drawImage(background, x, y, this); }        }    }    public class OverlayEditor extends Jtextarea {        public OverlayEditor() { super(1, 10); setBorder(null); setForeground(Color.WHITE); setOpaque(false); setSize(getPreferredSize()); getdocument().adddocumentListener(new documentListener() {     public void update() {         setSize(getPreferredSize());     }     @Override     public void insertUpdate(documentEvent e) {         update();     }     @Override     public void removeUpdate(documentEvent e) {         update();     }     @Override     public void changedUpdate(documentEvent e) {         update();     } }); addFocusListener(new FocusListener() {     @Override     public void focusGained(FocusEvent e) {         setBorder(new LineBorder(Color.WHITE));         repaint();     }     @Override     public void focusLost(FocusEvent e) {         setBorder(null);         repaint();     } });        }        @Override        protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); if (hasFocus()) {     g2d.setColor(new Color(0, 0, 0, 32));     g2d.fill(new Rectangle(getWidth(), getHeight())); } g2d.dispose();        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486935.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号