/* * Copyright (C) 2012 Vinu K.N * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.domainmath.gui.packages.image; import java.awt.BorderLayout; import java.awt.Desktop; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.StringTokenizer; import javax.swing.JFileChooser; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JTabbedPane; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import org.domainmath.gui.MainFrame; import static org.domainmath.gui.MainFrame.parent_root; import org.domainmath.gui.StatusPanel; import org.domainmath.gui.Util.DomainMathFileFilter; import org.domainmath.gui.about.AboutDlg; import org.domainmath.gui.dataview.DataViewFrame; public class ImageToolFrame extends javax.swing.JFrame { public JTabbedPane fileTab = new JTabbedPane(); private final StatusPanel status_panel; private String currentDir1; private JPopupMenu popup; private JMenuItem ploadItem; private JMenuItem pcloseItem; private JMenuItem pcloseAllItem; private JMenuItem pPropertiesItem; private List fileNameList =Collections.synchronizedList(new ArrayList()); public static int index; public ImageToolFrame() { this.setIconImage(icon); initComponents(); this.setSize(600, 400); fileTab.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); this.popupTab(); add(fileTab); status_panel=new StatusPanel(); add(status_panel,BorderLayout.PAGE_END); currentDir1 = null; } public String getCurrentDir() { return currentDir1; } public void setCurrentDir(String currentDir) { this.currentDir1 = currentDir; } private boolean anyFileOpened(){ return fileTab.getSelectedIndex() != -1; } private void popupTab(){ popup = new JPopupMenu(); ploadItem = new JMenuItem("Load"); pcloseItem = new JMenuItem("Close"); pcloseAllItem = new JMenuItem("Close All"); pPropertiesItem = new JMenuItem("Properties"); popup.add(ploadItem); popup.add(pcloseItem); popup.add(pcloseAllItem); popup.add(pPropertiesItem); fileTab.addMouseListener(new PopupListener(popup)); pPropertiesItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(anyFileOpened()) { displayImageProperties(); } } }); pcloseItem.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(anyFileOpened()) { removeFileNameFromList(fileTab.getSelectedIndex()); fileTab.remove(fileTab.getSelectedIndex()); index--; } } }); pcloseAllItem.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { int i=fileTab.getTabCount()-1; while(i != -1) { removeFileNameFromList(i); fileTab.remove(i); index--; i--; } } }); ploadItem.addActionListener(new java.awt.event.ActionListener(){ @Override public void actionPerformed(ActionEvent e) { ImageLoadDialog imageLoadDialog = new ImageLoadDialog(null,true,fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); imageLoadDialog.setLocationRelativeTo(null); imageLoadDialog.setVisible(true); } }); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jToolBar1 = new javax.swing.JToolBar(); openButton = new javax.swing.JButton(); propertiesButton = new javax.swing.JButton(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); openItem = new javax.swing.JMenuItem(); closeItem = new javax.swing.JMenuItem(); closeAllItem = new javax.swing.JMenuItem(); exportMenuItem = new javax.swing.JMenuItem(); jSeparator1 = new javax.swing.JPopupMenu.Separator(); exitItem = new javax.swing.JMenuItem(); imageMenu = new javax.swing.JMenu(); loadImageItem = new javax.swing.JMenuItem(); jMenuItem1 = new javax.swing.JMenuItem(); jMenuItem2 = new javax.swing.JMenuItem(); propertiesItem = new javax.swing.JMenuItem(); helpMenu = new javax.swing.JMenu(); forumItem = new javax.swing.JMenuItem(); onlineHelpItem = new javax.swing.JMenuItem(); howToItem = new javax.swing.JMenuItem(); faqItem = new javax.swing.JMenuItem(); jSeparator16 = new javax.swing.JPopupMenu.Separator(); suggestionsItem = new javax.swing.JMenuItem(); reportBugItem1 = new javax.swing.JMenuItem(); feedBackItem1 = new javax.swing.JMenuItem(); jSeparator12 = new javax.swing.JPopupMenu.Separator(); AboutItem = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/domainmath/gui/packages/image/resources/image-tool_en"); // NOI18N setTitle(bundle.getString("imageToolFrame.title")); // NOI18N jToolBar1.setFloatable(false); jToolBar1.setRollover(true); openButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-open.png"))); // NOI18N openButton.setFocusable(false); openButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); openButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); openButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openButtonActionPerformed(evt); } }); jToolBar1.add(openButton); propertiesButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/dialog-information.png"))); // NOI18N propertiesButton.setFocusable(false); propertiesButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); propertiesButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); propertiesButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { propertiesButtonActionPerformed(evt); } }); jToolBar1.add(propertiesButton); getContentPane().add(jToolBar1, java.awt.BorderLayout.PAGE_START); jMenu1.setText(bundle.getString("fileMenu.name")); // NOI18N openItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK)); openItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-open.png"))); // NOI18N openItem.setText(bundle.getString("openIem.name")); // NOI18N openItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openItemActionPerformed(evt); } }); jMenu1.add(openItem); closeItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK)); closeItem.setText(bundle.getString("closeItem.name")); // NOI18N closeItem.setToolTipText(bundle.getString("closeItem.tooltip")); // NOI18N closeItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeItemActionPerformed(evt); } }); jMenu1.add(closeItem); closeAllItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); closeAllItem.setText(bundle.getString("closeAllItem.name")); // NOI18N closeAllItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeAllItemActionPerformed(evt); } }); jMenu1.add(closeAllItem); exportMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); exportMenuItem.setText("Export"); exportMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { exportMenuItemActionPerformed(evt); } }); jMenu1.add(exportMenuItem); jMenu1.add(jSeparator1); exitItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.ALT_MASK)); exitItem.setText(bundle.getString("exitItem.name")); // NOI18N exitItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { exitItemActionPerformed(evt); } }); jMenu1.add(exitItem); jMenuBar1.add(jMenu1); imageMenu.setText(bundle.getString("imageMenu.name")); // NOI18N loadImageItem.setText(bundle.getString("loadImageItem")); // NOI18N loadImageItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { loadImageItemActionPerformed(evt); } }); imageMenu.add(loadImageItem); jMenuItem1.setText("Image Filter"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); imageMenu.add(jMenuItem1); jMenuItem2.setText("Smooth Image"); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem2ActionPerformed(evt); } }); imageMenu.add(jMenuItem2); propertiesItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); propertiesItem.setText(bundle.getString("propertiesItem")); // NOI18N propertiesItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { propertiesItemActionPerformed(evt); } }); imageMenu.add(propertiesItem); jMenuBar1.add(imageMenu); java.util.ResourceBundle bundle1 = java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en"); // NOI18N helpMenu.setText(bundle1.getString("helpMenu.name")); // NOI18N forumItem.setText("Forum"); forumItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { forumItemActionPerformed(evt); } }); helpMenu.add(forumItem); onlineHelpItem.setText("Help and Support"); onlineHelpItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onlineHelpItemActionPerformed(evt); } }); helpMenu.add(onlineHelpItem); howToItem.setText("How to..."); howToItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { howToItemActionPerformed(evt); } }); helpMenu.add(howToItem); faqItem.setText("Online FAQ"); faqItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { faqItemActionPerformed(evt); } }); helpMenu.add(faqItem); helpMenu.add(jSeparator16); suggestionsItem.setText("Suggestions"); suggestionsItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { suggestionsItemActionPerformed(evt); } }); helpMenu.add(suggestionsItem); reportBugItem1.setText(bundle1.getString("reportBugItem.name")); // NOI18N reportBugItem1.setToolTipText(bundle1.getString("reportBugItem.tooltip")); // NOI18N reportBugItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { reportBugItem1ActionPerformed(evt); } }); helpMenu.add(reportBugItem1); feedBackItem1.setText(bundle1.getString("yourFeedbackItem.name")); // NOI18N feedBackItem1.setToolTipText(bundle1.getString("yourFeedbackItem.tooltip")); // NOI18N feedBackItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { feedBackItem1ActionPerformed(evt); } }); helpMenu.add(feedBackItem1); helpMenu.add(jSeparator12); AboutItem.setText(bundle1.getString("aboutItem.name")); // NOI18N AboutItem.setToolTipText(bundle1.getString("aboutItem.tooltip")); // NOI18N AboutItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { AboutItemActionPerformed(evt); } }); helpMenu.add(AboutItem); jMenuBar1.add(helpMenu); setJMenuBar(jMenuBar1); pack(); }// </editor-fold>//GEN-END:initComponents private void openItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openItemActionPerformed open(); }//GEN-LAST:event_openItemActionPerformed public void setPath(String path) { try { URI uri = new URI(path); Desktop desktop=Desktop.getDesktop(); desktop.browse(uri); } catch (URISyntaxException | IOException ex) { } } private void forumItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_forumItemActionPerformed setPath("http://domainmathide.freeforums.org/"); }//GEN-LAST:event_forumItemActionPerformed private void onlineHelpItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onlineHelpItemActionPerformed setPath("http://domainmathide.freeforums.org/help-and-support-f5.html"); }//GEN-LAST:event_onlineHelpItemActionPerformed private void howToItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_howToItemActionPerformed setPath("http://domainmathide.freeforums.org/how-to-f9.html"); }//GEN-LAST:event_howToItemActionPerformed private void faqItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_faqItemActionPerformed setPath("http://domainmathide.freeforums.org/faq-f8.html"); }//GEN-LAST:event_faqItemActionPerformed private void suggestionsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suggestionsItemActionPerformed setPath("http://domainmathide.freeforums.org/suggestions-f6.html"); }//GEN-LAST:event_suggestionsItemActionPerformed private void reportBugItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_reportBugItem1ActionPerformed setPath("http://domainmathide.freeforums.org/bugs-f3.html"); }//GEN-LAST:event_reportBugItem1ActionPerformed private void feedBackItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_feedBackItem1ActionPerformed setPath("http://domainmathide.freeforums.org/feedback-f4.html"); }//GEN-LAST:event_feedBackItem1ActionPerformed private void AboutItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_AboutItemActionPerformed AboutDlg aboutDlg = new AboutDlg(this, true); aboutDlg.setLocationRelativeTo(this); aboutDlg.setVisible(true); }//GEN-LAST:event_AboutItemActionPerformed private void exitItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitItemActionPerformed dispose(); }//GEN-LAST:event_exitItemActionPerformed private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed open(); }//GEN-LAST:event_openButtonActionPerformed private void propertiesItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_propertiesItemActionPerformed displayImageProperties(); }//GEN-LAST:event_propertiesItemActionPerformed private void loadImageItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadImageItemActionPerformed if(anyFileOpened()) { ImageLoadDialog imageLoadDialog = new ImageLoadDialog(this,true,fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); imageLoadDialog.setLocationRelativeTo(this); imageLoadDialog.setVisible(true); } }//GEN-LAST:event_loadImageItemActionPerformed private void propertiesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_propertiesButtonActionPerformed displayImageProperties(); }//GEN-LAST:event_propertiesButtonActionPerformed private void closeItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeItemActionPerformed if(anyFileOpened()) { removeFileNameFromList(fileTab.getSelectedIndex()); fileTab.remove(fileTab.getSelectedIndex()); index--; } }//GEN-LAST:event_closeItemActionPerformed private void closeAllItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeAllItemActionPerformed int i=fileTab.getTabCount()-1; while(i != -1) { removeFileNameFromList(i); fileTab.remove(i); index--; i--; } }//GEN-LAST:event_closeAllItemActionPerformed private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed if(anyFileOpened()) { ImageFilterDialog im= new ImageFilterDialog(this,fileTab.getToolTipTextAt(fileTab.getSelectedIndex()),true); im.setLocationRelativeTo(this); im.setVisible(true); }else{ ImageFilterDialog im= new ImageFilterDialog(this,"",true); im.setLocationRelativeTo(this); im.setVisible(true); } }//GEN-LAST:event_jMenuItem1ActionPerformed private void exportMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportMenuItemActionPerformed ExportImageDialog exportImageDialog = new ExportImageDialog(this,true); exportImageDialog.setLocationRelativeTo(this); exportImageDialog.setVisible(true); }//GEN-LAST:event_exportMenuItemActionPerformed private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed SmoothImageDialog smoothImageDialog = new SmoothImageDialog(this,true); smoothImageDialog.setLocationRelativeTo(this); smoothImageDialog.setVisible(true); }//GEN-LAST:event_jMenuItem2ActionPerformed /** * @param args the command line arguments * @throws java.lang.ClassNotFoundException */ public static void main(String args[]) throws ClassNotFoundException { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new ImageToolFrame().setVisible(true); } }); } public Image icon = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/org/domainmath/gui/resources/DomainMath.png")); // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenuItem AboutItem; private javax.swing.JMenuItem closeAllItem; private javax.swing.JMenuItem closeItem; private javax.swing.JMenuItem exitItem; private javax.swing.JMenuItem exportMenuItem; private javax.swing.JMenuItem faqItem; private javax.swing.JMenuItem feedBackItem1; private javax.swing.JMenuItem forumItem; private javax.swing.JMenu helpMenu; private javax.swing.JMenuItem howToItem; private javax.swing.JMenu imageMenu; private javax.swing.JMenu jMenu1; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JMenuItem jMenuItem2; private javax.swing.JPopupMenu.Separator jSeparator1; private javax.swing.JPopupMenu.Separator jSeparator12; private javax.swing.JPopupMenu.Separator jSeparator16; private javax.swing.JToolBar jToolBar1; private javax.swing.JMenuItem loadImageItem; private javax.swing.JMenuItem onlineHelpItem; private javax.swing.JButton openButton; private javax.swing.JMenuItem openItem; private javax.swing.JButton propertiesButton; private javax.swing.JMenuItem propertiesItem; private javax.swing.JMenuItem reportBugItem1; private javax.swing.JMenuItem suggestionsItem; // End of variables declaration//GEN-END:variables public void addFileNameToList(String name) { fileNameList.add(name); } public void removeFileNameFromList(int index) { fileNameList.remove(index); } public void open(){ JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(System.getProperty("user.dir")+File.separator+"works")); fc.setAcceptAllFileFilterUsed(false); fc.setFileFilter(DomainMathFileFilter.IMAGES_FILE_FILTER); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); if(fileTab.getSelectedIndex() >= 0) { File f = new File(currentDir1); fc.setCurrentDirectory(f); } fc.setMultiSelectionEnabled(true); File file[]; int returnVal = fc.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { file = fc.getSelectedFiles(); this.setCurrentDir(fc.getCurrentDirectory().getAbsolutePath()); for (File file1 : file) { if (!fileNameList.contains(file1.getAbsolutePath())) { open(file1); } else { System.out.println(file1.getAbsolutePath() + " already open!"); } } } } public void open(File file) { LoadImagePanel loadImagePanel = new LoadImagePanel(file); fileTab.addTab(file.getName(), loadImagePanel); fileTab.setToolTipTextAt(index, file.getAbsolutePath()); fileTab.setSelectedIndex(index); this.addFileNameToList(file.getAbsolutePath()); index++; } public void generateProperties(){ if(anyFileOpened()) { MainFrame.octavePanel.evaluate("DomainMath_Image('"+parent_root+"DomainMath_Image.dat','"+fileTab.getToolTipTextAt(fileTab.getSelectedIndex())+"');"); } } public void displayImageProperties() { if(anyFileOpened()) { File f= new File(fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); String pic_name = f.getName(); String variable = pic_name.substring(0,f.getName().indexOf("."))+"_properties"; MainFrame.octavePanel.eval(variable+"=imfinfo('"+f.getAbsolutePath()+"');"); MainFrame.octavePanel.evaluate("DomainMath_OctaveDataView('"+MainFrame.log_root+variable+".dat',"+variable+",0);"); DataViewFrame n = new DataViewFrame(variable+"<1x1 struct>",MainFrame.log_root+variable+".dat"); } } class PopupListener extends MouseAdapter { JPopupMenu popup; PopupListener(JPopupMenu popupMenu) { popup = popupMenu; } @Override public void mousePressed(MouseEvent e) { maybeShowPopup(e); } @Override public void mouseReleased(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger() && fileTab.getTabCount() > 0) { popup.show(e.getComponent(), e.getX(), e.getY()); } } } }