이미지 위에 텍스트를 그립니다. 첫 번째 마우스를 클릭하면 사각형 영역이 표시됩니다. 텍스트를 입력하자마자 텍스트는 사각형 모양으로 그려야하고 사각형은 첨부 된 이미지에 표시된 텍스트로 자동 크기 조정되어야합니다.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. 이미지 위에 사각형 그리기
- 2. 이미지 위에 사각형 그리기
- 3. 이미지 위에 텍스트를 넣으시겠습니까?
- 4. HTML5 캔버스의 이미지 위에 텍스트를 쓰는 방법은 무엇입니까?
- 5. 오버레이 효과가있는 이미지에 텍스트를 쓰는 방법 #
- 6. html로 이미지 위에 텍스트를 삽입하는 방법은 무엇입니까?
- 7. 배경 이미지 위에 클릭 가능한 영역 설정
- 8. 자바 스크립트가있는 이미지 위에 표시 영역
- 9. Kinetic.js로 사각형 놓기 영역 만들기
- 10. 데스크탑에서 영역 사각형 선택
- 11. 이미지 위로 사각형 드래그
- 12. Android에서 캡처 이미지 위에 텍스트를 배치 하시겠습니까?
- 13. 이미지 배경 위에 텍스트를 오버레이하고 PDF로 변환
- 14. innerHTML을 사용하여 이미지 위에 텍스트를 삽입하려면 어떻게해야합니까?
- 15. CSS는 유체 이미지 위에 텍스트를 자릅니다.
- 16. 이미지 위에 텍스트를 편집하고 android에 저장 하시겠습니까?
- 17. CSS 또는 JS가없는 이미지 위에 텍스트를 넣어야합니다
- 18. JPanel에 jpg 이미지 표시
- 19. JPanel에 이미지 추가
- 20. JPanel에 직접 이미지 추가
- 21. JPanel에 JList의 이미지 표시
- 22. wxpython에서 "&"버튼 텍스트를 쓰는 방법
- 23. J2ME에서 직사각형에 텍스트를 쓰는 방법
- 24. 이미지 위에 레이블을 붙이는 방법
- 25. 사각형의 위에 텍스트를 그립니다.
- 26. 카메라에서 비디오 위에 사각형 표시
- 27. 배경 위에 버튼과 텍스트를 배치하는 방법 ImageView
- 28. 가로 및 세로 방향으로 이미지 위에 사각형 그리기
- 29. ReportViewer에서 이미지 위쪽에 텍스트를 배치하는 방법
- 30. 드래그하는 동안 사각형 영역 강조 표시
게시하시기 바랍니다 [SSCCE] (http://sscce.org) 당신이 한 일을 정확히 보여주고 당신을 갇혀 있거나 질문이 닫힐 수 있습니다. 실제 질문이 아니기 때문에 IMO –
투명 JTextArea를 사용할 수 있습니다. 영역의 문서에 'DocumentListener'를 추가합니다. 무언가가 타자를 친 때 지역 크기를 적응 시키십시오. – StanislavL
지금 g.drawString (텍스트, (int) p.getX(), p.getY());을 사용하여 텍스트를 그릴 수 있습니다. 이미지 위에 있지만 키보드 입력을 사용하여 이미지 위에 직접 텍스트를 그려야합니다. – NSR