中顯示的矩形區域內的圖像上寫文字,以便在圖像上繪製文字。在第一次鼠標點擊一個矩形區域顯示時,只要輸入文本,文本應該在矩形shap中繪製,矩形應該自動調整大小與附加圖像中顯示的文本。如何在JPanel
0
A
回答
5
的基本概念是像任何正常搖擺形式。你只需要添加一些額外的工作來將它們放在一起。
你需要決定的第一件事是你想要多行支持嗎?
下面的示例簡單地使用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();
}
}
}
+0
謝謝,您的寶貴迴應。 – NSR
+0
感謝您提出一個有趣的問題;) – MadProgrammer
相關問題
- 1. 如何添加Jpanel中的jpanel imagepanel?
- 2. 如何在JPanel(在JPanel)paint方法上添加圖像?
- 3. 如何對齊JPanel中的JPanel內的Jbuttons JPanel內
- 4. 如何旋轉JPanel?
- 5. 如何刷新JPanel?
- 6. 如何擴展JPanel
- 7. 如何訪問JPanel?
- 8. 如何刷新JPanel?
- 9. 如何在另一個JPanel內的JPanel上繪製Graphics2D?
- 10. 如何在周圍的JPanel底部對齊這些JPanel?
- 11. 如何在另一個JPanel中添加隨機座標的JPanel?
- 12. 如何將JPanel放在另一個JPanel上?
- 13. 如何在JDialog的JPanel中添加MapView以及另一個JPanel
- 14. 如何在另一個JPanel的中心添加一個JPanel?
- 15. 如何在另一個JPanel內的JPanel上繪製形狀?
- 16. 我是如何在jpanel中將jpanel與netbeans對中的?
- 17. 如何在JPanel中添加JButton?
- 18. 如何在JPanel上畫圓? Java 2D
- 19. 如何在jquery中動態創建JPanel?
- 20. 如何繪製JPanel在揮杆
- 21. 如何在CLONE JPanel中繪製paint()?
- 22. 如何在框架中添加JPanel
- 23. 如何在JPanel邊框中使用JButton?
- 24. 如何在JScrollPane中顯示JPanel?
- 25. 如何在Jpanel中顯示incanter圖表
- 26. 如何在java中打印jpanel?
- 27. 如何在畫布上繪製JPanel?
- 28. 如何在JPanel上播放mp4視頻?
- 29. 如何在JPanel上找到主色?
- 30. 如何在JPanel中加載圖像?
請張貼[SSCCE(http://sscce.org)準確地告訴你做了什麼,在哪裏你卡住了,或者問題可能會被關閉,因爲它不是一個真正的問題IMO –
您可以使用透明的JTextArea。將「DocumentListener」添加到該區域的文檔中。當輸入內容時,調整區域大小。 – StanislavL
現在我可以使用g.drawString(text,(int)p.getX(),(int)p.getY())來繪製文本。在圖像上,但我想使用鍵盤輸入直接在圖像上繪製文本。 – NSR