想要在图像上绘制文本。第一次单击鼠标时,将显示一个矩形区域,
一旦输入文本,则应以矩形形状绘制文本,并且矩形
应自动调整大小,如所附图像中所示。
基本概念类似于任何常规的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();
}
}
}
本文向大家介绍openCV提取图像中的矩形区域,包括了openCV提取图像中的矩形区域的使用技巧和注意事项,需要的朋友参考一下 改编自详解利用OpenCV提取图像中的矩形区域(PPT屏幕等) 原文是c++版,我改成了python版,供大家参考学习。 主要思想:边缘检测—》轮廓检测—》找出最大的面积的轮廓—》找出顶点—》投影变换 运行效果 用到的图片 以上就是本文的全部内容,希望对大家的学习有所帮助
问题内容: 在JPanel上显示jpg图像(从本地文件夹加载)的最合适的图像类型是什么? 干杯。 问题答案:
问题内容: 我有一张根据某些数据计算得出的图表,绘制在matplotlib中。我想在此图的全局最大值周围绘制一个矩形区域。我试过,但通话时似乎没有出现矩形 那么,如何在matplotlib图上绘制矩形区域?谢谢! 问题答案: 最可能的原因是在调用axhspan时将数据单元用作x参数。从函数的文档(我的重点): y坐标以数据单位为单位, x坐标以轴(相对于0-1)为单位 。 因此,任何向左拉伸为0或
我正在用Java和JAVAFX开发一个国际象棋游戏。我的棋盘是一个JAVAFX组,包含一个正方形数组。我的正方形继承自JAVAFX rectangle类。我想在这些方块里面画一个图像(棋子的图像),但是我似乎找不到方法。当我使用setfill来绘制图案时,正方形的颜色消失了,这不是我想要的,我希望图像是透明的,并绘制在每个正方形的顶部。有什么想法吗?
我正在尝试使用一个菜单栏,使用户能够选择一个文件,并在JPanel中显示它,图像应该完全适合JPanel。但是JFileChooser在从对话框中成功选择文件时不会显示任何内容。我试着参考了许多链接:如何向JPanel添加图像?浏览图像文件并使用Java Swing显示它,但没有任何结果。请帮帮忙。以下是我的代码: 更新后的代码如下:
下图会告诉你我想要什么。 我有图像中矩形的信息(宽度,高度,中心点和旋转度)。现在,我想写一个脚本来剪切它们并将它们保存为图像,但也要将它们拉直。就像这样,我想从图像内部显示的矩形转到外部显示的矩形。 我正在使用OpenCV Python。请告诉我实现这一点的方法。 请展示一些代码,因为OpenCVPython的例子很难找到。