2014-12-21 1 views
0

Я пишу программу, требующую кнопки, чтобы получить местоположение файла (путь к файлу). Теперь, после выбора файла, я хочу передать значение в строку, к которой я могу обратиться позже в приведенном ниже коде. Не могли бы вы рассказать мне, как это сделать?Как передать значение кнопки в строку, чтобы использовать ее позже в java?

Вот кнопка

Label labelWatermark = new Label(); 
final String wmark = new String(); 
Button btnWmark = new Button("Watermark?"); 
btnWmark.setOnAction(new EventHandler<ActionEvent>() { 

    @Override 
    public void handle(ActionEvent e) { 
     FileChooser wmarkFile = new FileChooser(); 
     fileWmark = wmarkFile.showOpenDialog(primaryStage); 
     String filePathWmark = fileWmark.getAbsolutePath(); 
     labelWatermark.setText(filePathWmark); 
     final String wmark = new String(filePathWmark); 
    } 
}); 

HBox hbBtnBrowse3 = new HBox(10); 
hbBtnBrowse3.setAlignment(Pos.CENTER); 
hbBtnBrowse3.getChildren().addAll(btnWmark, labelWatermark); 
grid.add(hbBtnBrowse3, 1, 5); 

Я хочу, чтобы получить строку wmark быть путь_к_файлом, которые я могу использовать в этой части ниже, в частности, строка, содержащая Image watermark_image = Image.getInstance(wmark):

try{ 
    while ((line = br.readLine()) != null) { 
    try { 
     String a = line; 
     PdfReader Post_Survey = new PdfReader(pdf); 
     int number_of_pages = Post_Survey.getNumberOfPages(); 
     PdfStamper stamp = new PdfStamper(Post_Survey, new 
     FileOutputStream("sample - " + line + ".pdf")); 
     int i = 0; 
     Image watermark_image = Image.getInstance(wmark); 
     BaseFont bf = BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.WINANSI, 
        BaseFont.EMBEDDED); 
     watermark_image.setAbsolutePosition(20, 40); 
     PdfContentByte add_watermark; 
     PdfContentByte add_text; 
     //start stamping!! 
     while (i < number_of_pages) { 
      i++; 
      // watermark image 
      add_watermark = stamp.getOverContent(i); 
      add_watermark.addImage(watermark_image); 
      // set where lines are  
      add_text = stamp.getOverContent(i); 
      add_text.setFontAndSize(bf, 12); 
      ColumnText.showTextAligned(add_text,Element.ALIGN_LEFT, new Phrase("This is the properties of blah blah and is solely used for " + line + " only!"), 20, 20, 0); 
     } 
     stamp.close(); 
     Post_Survey.close(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
}catch (Exception e) { 
    e.printStackTrace(); 
} 

Я думаю, потому что строка wmark заключена в пределах кнопки btnWmark, поэтому я не могу передать строку wmark. Так или иначе, мы можем ссылаться на него для последующего использования?

ответ

0

Почему вы не объявляете StringBuilder wmark за пределами кнопки setonAction и добавляете значение внутри него?

Label labelWatermark = new Label(); 
Button btnWmark = new Button("Watermark?"); 
final StringBuilder wmark = new StringBuilder(); 
btnWmark.setOnAction(new EventHandler<ActionEvent>() { 

    @Override 
    public void handle(ActionEvent e) { 
     FileChooser wmarkFile = new FileChooser(); 
     fileWmark = wmarkFile.showOpenDialog(primaryStage); 
     String filePathWmark = fileWmark.getAbsolutePath(); 
     labelWatermark.setText(filePathWmark); 
     wmark.append(filePathWmark); 
    } 
}); 

А потом просто использовать его

Image watermark_image = Image.getInstance(wmark.toString()); 
+0

Отлично! Это действительно решило мою проблему. : D. Большое спасибо!!! – Zestos

+0

Однако, я думаю, мы должны прокомментировать строку 'final String wmark = new String();' вы не думаете? – Zestos

+0

Ну, мой плохой, просто удалите эту линию. – ItachiUchiha