2017-02-07 2 views
0

Я хотел бы получить пользовательский текст на изображении, например, если я сделаю два текстовых поля, один для имени и второй для даты, поэтому, когда я ввожу чье-то имя и дату, после ввода, если я нажал OK, это будет отображение на этом изображении.Как разместить пользовательский текст на изображении?

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class billFrame extends JFrame 
{ 
    public billFrame() 
    { 
     JFrame f1 = new JFrame("Billng Application"); 
     f1.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     f1.setSize(500,500); 
     f1.setBounds(30, 50, 500, 700); 
     f1.setExtendedState(JFrame.MAXIMIZED_BOTH); 

     ImageIcon icon = new 
     ImageIcon("C:\\Users\\Dhaval\\Downloads\\shrihari.png"); 
     Image image = icon.getImage(); 
     JPanel panel1; 
     panel1 = new JPanel() 
     { 
      @Override 
      protected void paintComponent(Graphics g) 
      { 
       super.paintComponent(g); 
       g.drawImage(image, 1400, 0, 500, 700, this); 
      } 

      @Override 
      public Dimension getPreferredSize() 
      { 
       return new Dimension(320, 200); 
      } 
     }; 
     f1.add(panel1); 
     panel1.setVisible(true); 
     panel1.setLayout(null); 

     JLabel name = new JLabel("Name :"); 
     name.setVisible(true); 
     name.setLocation(100,100); 
     name.setSize(100,100); 
     panel1.add(name); 

     JTextField namet = new JTextField(); 
     namet.setVisible(true); 
     namet.setLocation(150, 137); 
     namet.setSize(200,30); 
     panel1.add(namet); 
     f1.setVisible(true); 
    } 
    @SuppressWarnings("unchecked")        
    public static void main(String args[]) 
    { 
     billFrame bf = new billFrame(); 
    }     
} 
+0

1) 'panel1.setLayout (null);' Java GUI должны работать на разных ОС, размер экрана, разрешение экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). 2) Пожалуйста, изучите общую номенклатуру Java (соглашения об именах - например, 'EveryWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', если .. –

+0

.. это 'UPPER_CASE_CONSTANT') и использовать его последовательно. 3) Один из способов получить изображение (-ы) для примера - это горячая ссылка на изображения, увиденные в [этот вопрос и ответы] (http://stackoverflow.com/q/19209650/418556). 4) Ресурсы приложений станут частью встроенных ресурсов к моменту развертывания, поэтому разумно начать доступ к ним, как если бы они были, прямо сейчас. К [тегу: embedded-resource] должен быть доступен URL, а не файл. См. [Info. страница для встроенного ресурса] (http://stackoverflow.com/tags/embedded-resource/info) для того, как формировать URL-адрес. –

ответ

2

Вот пример:

static void addTextWatermark(String text, File sourceImageFile, File destImageFile) { 
try { 
    BufferedImage sourceImage = ImageIO.read(sourceImageFile); 
    Graphics2D g2d = (Graphics2D) sourceImage.getGraphics(); 

    // initializes necessary graphic properties 
    AlphaComposite alphaChannel = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f); 
    g2d.setComposite(alphaChannel); 
    g2d.setColor(Color.BLUE); 
    g2d.setFont(new Font("Arial", Font.BOLD, 64)); 
    FontMetrics fontMetrics = g2d.getFontMetrics(); 
    Rectangle2D rect = fontMetrics.getStringBounds(text, g2d); 

    // calculates the coordinate where the String is painted 
    int centerX = (sourceImage.getWidth() - (int) rect.getWidth())/2; 
    int centerY = sourceImage.getHeight()/2; 

    // paints the textual watermark 
    g2d.drawString(text, centerX, centerY); 

    ImageIO.write(sourceImage, "png", destImageFile); 
    g2d.dispose(); 

    System.out.println("The tex watermark is added to the image."); 

} catch (IOException ex) { 
    System.err.println(ex); 
} 
} 

А вот использование

File sourceImageFile = new  File("name.png"); 
File destImageFile = new File("anothername.png"); 
addTextWatermark("Text", sourceImageFile, destImageFile); 

Или вы можете нам LIBS для этого. Например: http://www.gif4j.com

+0

Мне не нужен водяной знак ... прежде всего, прочитайте вопрос правильно, а затем ответьте – dhvl5

+0

Итак, удалите компонент alp из цвета и строки 'System.out.println (« Водяной знак tex добавлен к изображению. "); & & работа выполнена! Не ожидайте, что здесь будут установлены точные решения для ложки, это не справочная служба (батареи AKA «не включены»). BTW. Я ждал, чтобы понять, есть ли смысл отвечать на мои комментарии, но вы, по-видимому, игнорируете меня, поэтому я закрою эту вкладку в браузере. –

Смежные вопросы