Autopsy  4.18.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
StringsContentPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2021 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.contentviewers.textcontentviewer;
20 
21 import java.awt.Cursor;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.ActionListener;
24 import java.util.Arrays;
25 import java.util.List;
26 import java.util.concurrent.ExecutionException;
27 import java.util.logging.Level;
28 import org.openide.util.NbBundle;
30 import javax.swing.JMenuItem;
31 import javax.swing.JOptionPane;
32 import javax.swing.SwingWorker;
33 import org.apache.commons.lang3.StringUtils;
34 import org.openide.util.NbBundle.Messages;
40 import org.sleuthkit.datamodel.Content;
41 import org.sleuthkit.datamodel.TskCoreException;
42 
46 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
47 public class StringsContentPanel extends javax.swing.JPanel {
48 
49  private static long currentOffset = 0;
50  private static final long PAGE_LENGTH = 16384;
51  private static final long serialVersionUID = 1L;
52  private final byte[] data = new byte[(int) PAGE_LENGTH];
53  private static int currentPage = 1;
54  private Content dataSource;
55  private static final Logger logger = Logger.getLogger(StringsContentPanel.class.getName());
56 
57  private SwingWorker<String, Void> worker;
58 
63  initComponents();
64  customizeComponents();
65  this.resetDisplay();
66  }
67 
68  private void customizeComponents() {
69  outputViewPane.setComponentPopupMenu(rightClickMenu);
70  ActionListener actList = (ActionEvent e) -> {
71  JMenuItem jmi = (JMenuItem) e.getSource();
72  if (jmi.equals(copyMenuItem)) {
73  outputViewPane.copy();
74  } else if (jmi.equals(selectAllMenuItem)) {
75  outputViewPane.selectAll();
76  }
77  };
78  copyMenuItem.addActionListener(actList);
79  selectAllMenuItem.addActionListener(actList);
80 
81  List<SCRIPT> supportedScripts = StringExtract.getSupportedScripts();
82  supportedScripts.forEach((s) -> {
83  languageCombo.addItem(s);
84  });
85 
86  // use wrap layout for better component wrapping
87  WrapLayout layout = new WrapLayout(0, 5);
88  layout.setOppositeAligned(Arrays.asList(panelScriptSelect));
89  controlPanel.setLayout(layout);
90 
91  }
92 
93  final void resetDisplay() {
94  // clear / reset the fields
95  currentPage = 1;
96  currentOffset = 0;
97  this.dataSource = null;
98  currentPageLabel.setText("");
99  totalPageLabel.setText("");
100  prevPageButton.setEnabled(false);
101  nextPageButton.setEnabled(false);
102  outputViewPane.setText(""); // reset the output view
103  setComponentsVisibility(false); // hides the components that not needed
104  }
105 
111  @SuppressWarnings("unchecked")
112  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
113  private void initComponents() {
114 
115  rightClickMenu = new javax.swing.JPopupMenu();
116  copyMenuItem = new javax.swing.JMenuItem();
117  selectAllMenuItem = new javax.swing.JMenuItem();
118  controlPanel = new javax.swing.JPanel();
119  javax.swing.JPanel panelPageOfCount = new javax.swing.JPanel();
120  pageLabel = new javax.swing.JLabel();
121  javax.swing.JSeparator jSepMed1 = new javax.swing.JSeparator();
122  currentPageLabel = new javax.swing.JLabel();
123  javax.swing.JSeparator jSepMed2 = new javax.swing.JSeparator();
124  ofLabel = new javax.swing.JLabel();
125  javax.swing.JSeparator jSepMed3 = new javax.swing.JSeparator();
126  totalPageLabel = new javax.swing.JLabel();
127  javax.swing.JSeparator jSepMed4 = new javax.swing.JSeparator();
128  javax.swing.JPanel panelPageNextPrevButton = new javax.swing.JPanel();
129  pageLabel2 = new javax.swing.JLabel();
130  javax.swing.JSeparator jSepMed5 = new javax.swing.JSeparator();
131  prevPageButton = new javax.swing.JButton();
132  nextPageButton = new javax.swing.JButton();
133  javax.swing.JSeparator jSepMed6 = new javax.swing.JSeparator();
134  javax.swing.JPanel panelGoToPage = new javax.swing.JPanel();
135  goToPageLabel = new javax.swing.JLabel();
136  javax.swing.JSeparator jSepSm1 = new javax.swing.JSeparator();
137  goToPageTextField = new javax.swing.JTextField();
138  javax.swing.JSeparator jSepMed7 = new javax.swing.JSeparator();
139  panelScriptSelect = new javax.swing.JPanel();
140  languageLabel = new javax.swing.JLabel();
141  javax.swing.JSeparator jSepSm2 = new javax.swing.JSeparator();
142  languageCombo = new javax.swing.JComboBox<>();
143  outputScrollPane = new javax.swing.JScrollPane();
144  outputViewPane = new javax.swing.JTextPane();
145 
146  copyMenuItem.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.copyMenuItem.text")); // NOI18N
147  rightClickMenu.add(copyMenuItem);
148 
149  selectAllMenuItem.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.selectAllMenuItem.text")); // NOI18N
150  rightClickMenu.add(selectAllMenuItem);
151 
152  setMinimumSize(new java.awt.Dimension(250, 5));
153  setPreferredSize(new java.awt.Dimension(250, 58));
154  setLayout(new java.awt.BorderLayout());
155 
156  controlPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0));
157 
158  panelPageOfCount.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
159 
160  pageLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.pageLabel.text_1")); // NOI18N
161  pageLabel.setMaximumSize(new java.awt.Dimension(33, 25));
162  pageLabel.setMinimumSize(new java.awt.Dimension(33, 25));
163  pageLabel.setPreferredSize(new java.awt.Dimension(32, 25));
164  panelPageOfCount.add(pageLabel);
165 
166  jSepMed1.setPreferredSize(new java.awt.Dimension(5, 0));
167  panelPageOfCount.add(jSepMed1);
168 
169  currentPageLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.currentPageLabel.text_1")); // NOI18N
170  currentPageLabel.setMaximumSize(new java.awt.Dimension(18, 25));
171  currentPageLabel.setMinimumSize(new java.awt.Dimension(7, 25));
172  currentPageLabel.setPreferredSize(new java.awt.Dimension(18, 25));
173  panelPageOfCount.add(currentPageLabel);
174 
175  jSepMed2.setPreferredSize(new java.awt.Dimension(5, 0));
176  panelPageOfCount.add(jSepMed2);
177 
178  ofLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.ofLabel.text_1")); // NOI18N
179  ofLabel.setMaximumSize(new java.awt.Dimension(11, 25));
180  ofLabel.setMinimumSize(new java.awt.Dimension(11, 25));
181  ofLabel.setPreferredSize(new java.awt.Dimension(11, 25));
182  panelPageOfCount.add(ofLabel);
183 
184  jSepMed3.setPreferredSize(new java.awt.Dimension(5, 0));
185  panelPageOfCount.add(jSepMed3);
186 
187  totalPageLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.totalPageLabel.text_1")); // NOI18N
188  totalPageLabel.setMaximumSize(new java.awt.Dimension(21, 25));
189  totalPageLabel.setMinimumSize(new java.awt.Dimension(21, 25));
190  totalPageLabel.setPreferredSize(new java.awt.Dimension(21, 25));
191  panelPageOfCount.add(totalPageLabel);
192 
193  jSepMed4.setPreferredSize(new java.awt.Dimension(5, 0));
194  panelPageOfCount.add(jSepMed4);
195 
196  controlPanel.add(panelPageOfCount);
197 
198  panelPageNextPrevButton.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 0));
199 
200  pageLabel2.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.pageLabel2.text")); // NOI18N
201  pageLabel2.setMaximumSize(new java.awt.Dimension(29, 25));
202  pageLabel2.setMinimumSize(new java.awt.Dimension(29, 25));
203  pageLabel2.setPreferredSize(new java.awt.Dimension(29, 25));
204  panelPageNextPrevButton.add(pageLabel2);
205 
206  jSepMed5.setPreferredSize(new java.awt.Dimension(5, 0));
207  panelPageNextPrevButton.add(jSepMed5);
208 
209  prevPageButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_back.png"))); // NOI18N
210  prevPageButton.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.prevPageButton.text")); // NOI18N
211  prevPageButton.setBorderPainted(false);
212  prevPageButton.setContentAreaFilled(false);
213  prevPageButton.setDisabledIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_back_disabled.png"))); // NOI18N
214  prevPageButton.setMargin(new java.awt.Insets(2, 0, 2, 0));
215  prevPageButton.setMaximumSize(new java.awt.Dimension(25, 25));
216  prevPageButton.setMinimumSize(new java.awt.Dimension(20, 25));
217  prevPageButton.setPreferredSize(new java.awt.Dimension(25, 25));
218  prevPageButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_back_hover.png"))); // NOI18N
219  prevPageButton.addActionListener(new java.awt.event.ActionListener() {
220  public void actionPerformed(java.awt.event.ActionEvent evt) {
221  prevPageButtonActionPerformed(evt);
222  }
223  });
224  panelPageNextPrevButton.add(prevPageButton);
225 
226  nextPageButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_forward.png"))); // NOI18N
227  nextPageButton.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.nextPageButton.text")); // NOI18N
228  nextPageButton.setBorderPainted(false);
229  nextPageButton.setContentAreaFilled(false);
230  nextPageButton.setDisabledIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_forward_disabled.png"))); // NOI18N
231  nextPageButton.setMargin(new java.awt.Insets(2, 0, 2, 0));
232  nextPageButton.setMaximumSize(new java.awt.Dimension(25, 25));
233  nextPageButton.setMinimumSize(new java.awt.Dimension(20, 25));
234  nextPageButton.setPreferredSize(new java.awt.Dimension(25, 25));
235  nextPageButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_forward_hover.png"))); // NOI18N
236  nextPageButton.addActionListener(new java.awt.event.ActionListener() {
237  public void actionPerformed(java.awt.event.ActionEvent evt) {
238  nextPageButtonActionPerformed(evt);
239  }
240  });
241  panelPageNextPrevButton.add(nextPageButton);
242 
243  jSepMed6.setPreferredSize(new java.awt.Dimension(5, 0));
244  panelPageNextPrevButton.add(jSepMed6);
245 
246  controlPanel.add(panelPageNextPrevButton);
247 
248  panelGoToPage.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
249 
250  goToPageLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.goToPageLabel.text")); // NOI18N
251  panelGoToPage.add(goToPageLabel);
252 
253  jSepSm1.setPreferredSize(new java.awt.Dimension(2, 0));
254  panelGoToPage.add(jSepSm1);
255 
256  goToPageTextField.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.goToPageTextField.text")); // NOI18N
257  goToPageTextField.setMaximumSize(new java.awt.Dimension(2147483647, 25));
258  goToPageTextField.setMinimumSize(new java.awt.Dimension(50, 25));
259  goToPageTextField.setPreferredSize(new java.awt.Dimension(70, 25));
260  goToPageTextField.addActionListener(new java.awt.event.ActionListener() {
261  public void actionPerformed(java.awt.event.ActionEvent evt) {
262  goToPageTextFieldActionPerformed(evt);
263  }
264  });
265  panelGoToPage.add(goToPageTextField);
266 
267  jSepMed7.setPreferredSize(new java.awt.Dimension(5, 0));
268  panelGoToPage.add(jSepMed7);
269 
270  controlPanel.add(panelGoToPage);
271 
272  panelScriptSelect.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
273 
274  languageLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.languageLabel.text")); // NOI18N
275  languageLabel.setToolTipText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.languageLabel.toolTipText")); // NOI18N
276  panelScriptSelect.add(languageLabel);
277 
278  jSepSm2.setPreferredSize(new java.awt.Dimension(2, 0));
279  panelScriptSelect.add(jSepSm2);
280 
281  languageCombo.setToolTipText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.languageCombo.toolTipText")); // NOI18N
282  languageCombo.setMinimumSize(new java.awt.Dimension(150, 25));
283  languageCombo.setPreferredSize(new java.awt.Dimension(150, 25));
284  languageCombo.addActionListener(new java.awt.event.ActionListener() {
285  public void actionPerformed(java.awt.event.ActionEvent evt) {
286  languageComboActionPerformed(evt);
287  }
288  });
289  panelScriptSelect.add(languageCombo);
290 
291  controlPanel.add(panelScriptSelect);
292 
293  add(controlPanel, java.awt.BorderLayout.NORTH);
294 
295  outputViewPane.setEditable(false);
296  outputScrollPane.setViewportView(outputViewPane);
297 
298  add(outputScrollPane, java.awt.BorderLayout.CENTER);
299  }// </editor-fold>//GEN-END:initComponents
300 
301  private void languageComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_languageComboActionPerformed
302  if (dataSource != null) {
303  setDataView(dataSource, currentOffset);
304  }
305  }//GEN-LAST:event_languageComboActionPerformed
306 
307  private void goToPageTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_goToPageTextFieldActionPerformed
308  String pageNumberStr = goToPageTextField.getText();
309  int pageNumber;
310  int maxPage = Math.round((dataSource.getSize() - 1) / PAGE_LENGTH) + 1;
311  try {
312  pageNumber = Integer.parseInt(pageNumberStr);
313  } catch (NumberFormatException ex) {
314  pageNumber = maxPage + 1;
315  }
316  if (pageNumber > maxPage || pageNumber < 1) {
317  JOptionPane.showMessageDialog(this,
318  NbBundle.getMessage(this.getClass(),
319  "StringsTextViewer.goToPageTextField.msgDlg",
320  maxPage),
321  NbBundle.getMessage(this.getClass(),
322  "StringsTextViewer.goToPageTextField.err"),
323  JOptionPane.WARNING_MESSAGE);
324  return;
325  }
326  currentOffset = (pageNumber - 1) * PAGE_LENGTH;
327  currentPage = pageNumber;
328  currentPageLabel.setText(Integer.toString(currentPage));
329  setDataView(dataSource, currentOffset);
330  }//GEN-LAST:event_goToPageTextFieldActionPerformed
331 
332  private void prevPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prevPageButtonActionPerformed
333  //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar
334  currentOffset -= PAGE_LENGTH;
335  currentPage -= 1;
336  currentPageLabel.setText(Integer.toString(currentPage));
337  setDataView(dataSource, currentOffset);
338  }//GEN-LAST:event_prevPageButtonActionPerformed
339 
340  private void nextPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextPageButtonActionPerformed
341  //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar
342  currentOffset += PAGE_LENGTH;
343  currentPage += 1;
344  currentPageLabel.setText(Integer.toString(currentPage));
345  setDataView(dataSource, currentOffset);
346  }//GEN-LAST:event_nextPageButtonActionPerformed
347 
348  // Variables declaration - do not modify//GEN-BEGIN:variables
349  private javax.swing.JPanel controlPanel;
350  private javax.swing.JMenuItem copyMenuItem;
351  private javax.swing.JLabel currentPageLabel;
352  private javax.swing.JLabel goToPageLabel;
353  private javax.swing.JTextField goToPageTextField;
354  private javax.swing.JComboBox<SCRIPT> languageCombo;
355  private javax.swing.JLabel languageLabel;
356  private javax.swing.JButton nextPageButton;
357  private javax.swing.JLabel ofLabel;
358  private javax.swing.JScrollPane outputScrollPane;
359  private javax.swing.JTextPane outputViewPane;
360  private javax.swing.JLabel pageLabel;
361  private javax.swing.JLabel pageLabel2;
362  private javax.swing.JPanel panelScriptSelect;
363  private javax.swing.JButton prevPageButton;
364  private javax.swing.JPopupMenu rightClickMenu;
365  private javax.swing.JMenuItem selectAllMenuItem;
366  private javax.swing.JLabel totalPageLabel;
367  // End of variables declaration//GEN-END:variables
368 
369  @Messages({
370  "StringContentPanel_Loading_String=Loading text..."
371  })
372 
379  void setDataView(Content dataSource, long offset) {
380 
381  if (worker != null) {
382  worker.cancel(true);
383  worker = null;
384  }
385 
386  if (dataSource == null) {
387  return;
388  }
389 
390  worker = new ContentWorker(dataSource, offset);
391  outputViewPane.setText(Bundle.StringContentPanel_Loading_String());
392  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
393  worker.execute();
394  }
395 
396  void setDataView(StringContent dataSource) {
397  if (worker != null) {
398  worker.cancel(true);
399  worker = null;
400  }
401 
402  if (dataSource == null) {
403  return;
404  }
405 
406  worker = new StringContentWorker(dataSource);
407  outputViewPane.setText(Bundle.StringContentPanel_Loading_String());
408  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
409  worker.execute();
410  }
411 
417  private void setComponentsVisibility(boolean isVisible) {
418  currentPageLabel.setVisible(isVisible);
419  totalPageLabel.setVisible(isVisible);
420  ofLabel.setVisible(isVisible);
421  prevPageButton.setVisible(isVisible);
422  nextPageButton.setVisible(isVisible);
423  pageLabel.setVisible(isVisible);
424  pageLabel2.setVisible(isVisible);
425  goToPageTextField.setVisible(isVisible);
426  goToPageLabel.setVisible(isVisible);
427  languageCombo.setVisible(isVisible);
428  languageLabel.setVisible(isVisible);
429  }
430 
434  private final class ContentWorker extends SwingWorker<String, Void> {
435 
436  private final Content content;
437  private final long offset;
438 
445  ContentWorker(Content content, long offset) {
446  this.content = content;
447  this.offset = offset;
448  }
449 
450  @Override
451  protected String doInBackground() throws Exception {
452  int bytesRead = 0;
453  // set the data on the bottom and show it
454 
455  if (content.getSize() > 0) {
456  try {
457  bytesRead = content.read(data, offset, PAGE_LENGTH); // read the data
458  } catch (TskCoreException ex) {
459  logger.log(Level.WARNING, "Error while trying to show the String content.", ex); //NON-NLS
460  }
461  }
462  String text;
463  if (bytesRead > 0) {
464  //text = DataConversion.getString(data, bytesRead, 4);
465  final SCRIPT selScript = (SCRIPT) languageCombo.getSelectedItem();
466  StringExtract stringExtract = new StringExtract();
467  stringExtract.setEnabledScript(selScript);
468  StringExtractResult res = stringExtract.extract(data, bytesRead, 0);
469  text = res.getText();
470  if (StringUtils.isBlank(text)) {
471  text = NbBundle.getMessage(this.getClass(),
472  "StringsTextViewer.setDataView.errorNoText", currentOffset,
473  currentOffset + PAGE_LENGTH);
474  }
475  } else {
476  text = NbBundle.getMessage(this.getClass(), "StringsTextViewer.setDataView.errorText", currentOffset,
477  currentOffset + PAGE_LENGTH);
478  }
479 
480  return text;
481  }
482 
483  @Override
484  public void done() {
485  if (isCancelled()) {
486  return;
487  }
488 
489  try {
490  if (isCancelled()) {
491  return;
492  }
493  String text = get();
494  dataSource = content;
495 
496  // disable or enable the next button
497  if (offset + PAGE_LENGTH < dataSource.getSize()) {
498  nextPageButton.setEnabled(true);
499  } else {
500  nextPageButton.setEnabled(false);
501  }
502 
503  if (offset == 0) {
504  prevPageButton.setEnabled(false);
505  currentPage = 1; // reset the page number
506  } else {
507  prevPageButton.setEnabled(true);
508  }
509 
510  int totalPage = Math.round((dataSource.getSize() - 1) / PAGE_LENGTH) + 1;
511  totalPageLabel.setText(Integer.toString(totalPage));
512  currentPageLabel.setText("1");
513  outputViewPane.setText(text); // set the output view
514  setComponentsVisibility(true); // shows the components that not needed
515  outputViewPane.moveCaretPosition(0);
516 
517  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
518 
519  } catch (InterruptedException | ExecutionException ex) {
520  logger.log(Level.SEVERE, String.format("Failed to get text from content (id=%d)", content.getId()), ex);
521  }
522  }
523  }
524 
528  private final class StringContentWorker extends SwingWorker<String, Void> {
529 
530  private final StringContent content;
531 
538  this.content = content;
539  }
540 
541  @Override
542  protected String doInBackground() throws Exception {
543  return content.getString();
544  }
545 
546  @Override
547  public void done() {
548  if (isCancelled()) {
549  return;
550  }
551 
552  try {
553  String text = get();
554 
555  dataSource = null;
556  nextPageButton.setEnabled(false);
557  prevPageButton.setEnabled(false);
558  currentPage = 1;
559 
560  totalPageLabel.setText("1");
561  currentPageLabel.setText("1");
562  outputViewPane.setText(text); // set the output view
563  setComponentsVisibility(true); // shows the components that not needed
564  outputViewPane.moveCaretPosition(0);
565  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
566 
567  } catch (InterruptedException | ExecutionException ex) {
568  logger.log(Level.SEVERE, String.format("Failed to get text from StringContent"), ex);
569  }
570  }
571  }
572 }
StringExtractResult extract(byte[] buff, int len, int offset)
void setOppositeAligned(Collection< Component > oppAlignedComponents)
synchronized static Logger getLogger(String name)
Definition: Logger.java:124

Copyright © 2012-2021 Basis Technology. Generated on: Thu Jul 8 2021
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.