| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package sampledesktopapplication; |
| |
| import org.jdesktop.application.Action; |
| import org.jdesktop.application.ResourceMap; |
| import org.jdesktop.application.SingleFrameApplication; |
| import org.jdesktop.application.FrameView; |
| import org.jdesktop.application.TaskMonitor; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| import javax.swing.Timer; |
| import javax.swing.Icon; |
| import javax.swing.JDialog; |
| import javax.swing.JFrame; |
| |
| /** |
| * The application's main frame. |
| */ |
| public class SampleDesktopView extends FrameView { |
| |
| public SampleDesktopView(SingleFrameApplication app) { |
| super(app); |
| |
| initComponents(); |
| |
| // status bar initialization - message timeout, idle icon and busy animation, etc |
| ResourceMap resourceMap = getResourceMap(); |
| int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout"); |
| messageTimer = new Timer(messageTimeout, new ActionListener() { |
| public void actionPerformed(ActionEvent e) { |
| statusMessageLabel.setText(""); |
| } |
| }); |
| messageTimer.setRepeats(false); |
| int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate"); |
| for (int i = 0; i < busyIcons.length; i++) { |
| busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]"); |
| } |
| busyIconTimer = new Timer(busyAnimationRate, new ActionListener() { |
| public void actionPerformed(ActionEvent e) { |
| busyIconIndex = (busyIconIndex + 1) % busyIcons.length; |
| statusAnimationLabel.setIcon(busyIcons[busyIconIndex]); |
| } |
| }); |
| idleIcon = resourceMap.getIcon("StatusBar.idleIcon"); |
| statusAnimationLabel.setIcon(idleIcon); |
| progressBar.setVisible(false); |
| |
| // connecting action tasks to status bar via TaskMonitor |
| TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext()); |
| taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() { |
| public void propertyChange(java.beans.PropertyChangeEvent evt) { |
| String propertyName = evt.getPropertyName(); |
| if ("started".equals(propertyName)) { |
| if (!busyIconTimer.isRunning()) { |
| statusAnimationLabel.setIcon(busyIcons[0]); |
| busyIconIndex = 0; |
| busyIconTimer.start(); |
| } |
| progressBar.setVisible(true); |
| progressBar.setIndeterminate(true); |
| } else if ("done".equals(propertyName)) { |
| busyIconTimer.stop(); |
| statusAnimationLabel.setIcon(idleIcon); |
| progressBar.setVisible(false); |
| progressBar.setValue(0); |
| } else if ("message".equals(propertyName)) { |
| String text = (String)(evt.getNewValue()); |
| statusMessageLabel.setText((text == null) ? "" : text); |
| messageTimer.restart(); |
| } else if ("progress".equals(propertyName)) { |
| int value = (Integer)(evt.getNewValue()); |
| progressBar.setVisible(true); |
| progressBar.setIndeterminate(false); |
| progressBar.setValue(value); |
| } |
| } |
| }); |
| } |
| |
| @Action |
| public void showAboutBox() { |
| if (aboutBox == null) { |
| JFrame mainFrame = SampleDesktopApplication.getApplication().getMainFrame(); |
| aboutBox = new SampleDesktopAboutBox(mainFrame); |
| aboutBox.setLocationRelativeTo(mainFrame); |
| } |
| SampleDesktopApplication.getApplication().show(aboutBox); |
| } |
| |
| /** 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() { |
| |
| mainPanel = new javax.swing.JPanel(); |
| menuBar = new javax.swing.JMenuBar(); |
| javax.swing.JMenu fileMenu = new javax.swing.JMenu(); |
| javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem(); |
| javax.swing.JMenu helpMenu = new javax.swing.JMenu(); |
| javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem(); |
| statusPanel = new javax.swing.JPanel(); |
| javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator(); |
| statusMessageLabel = new javax.swing.JLabel(); |
| statusAnimationLabel = new javax.swing.JLabel(); |
| progressBar = new javax.swing.JProgressBar(); |
| |
| mainPanel.setName("mainPanel"); // NOI18N |
| |
| javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); |
| mainPanel.setLayout(mainPanelLayout); |
| mainPanelLayout.setHorizontalGroup( |
| mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGap(0, 400, Short.MAX_VALUE) |
| ); |
| mainPanelLayout.setVerticalGroup( |
| mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGap(0, 252, Short.MAX_VALUE) |
| ); |
| |
| menuBar.setName("menuBar"); // NOI18N |
| |
| org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(sampledesktopapplication.SampleDesktopApplication.class).getContext().getResourceMap(SampleDesktopView.class); |
| fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N |
| fileMenu.setName("fileMenu"); // NOI18N |
| |
| javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(sampledesktopapplication.SampleDesktopApplication.class).getContext().getActionMap(SampleDesktopView.class, this); |
| exitMenuItem.setAction(actionMap.get("quit")); // NOI18N |
| exitMenuItem.setName("exitMenuItem"); // NOI18N |
| fileMenu.add(exitMenuItem); |
| |
| menuBar.add(fileMenu); |
| |
| helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N |
| helpMenu.setName("helpMenu"); // NOI18N |
| |
| aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N |
| aboutMenuItem.setName("aboutMenuItem"); // NOI18N |
| helpMenu.add(aboutMenuItem); |
| |
| menuBar.add(helpMenu); |
| |
| statusPanel.setName("statusPanel"); // NOI18N |
| |
| statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N |
| |
| statusMessageLabel.setName("statusMessageLabel"); // NOI18N |
| |
| statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); |
| statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N |
| |
| progressBar.setName("progressBar"); // NOI18N |
| |
| javax.swing.GroupLayout statusPanelLayout = new javax.swing.GroupLayout(statusPanel); |
| statusPanel.setLayout(statusPanelLayout); |
| statusPanelLayout.setHorizontalGroup( |
| statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addComponent(statusPanelSeparator, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) |
| .addGroup(statusPanelLayout.createSequentialGroup() |
| .addContainerGap() |
| .addComponent(statusMessageLabel) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 226, Short.MAX_VALUE) |
| .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addComponent(statusAnimationLabel) |
| .addContainerGap()) |
| ); |
| statusPanelLayout.setVerticalGroup( |
| statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGroup(statusPanelLayout.createSequentialGroup() |
| .addComponent(statusPanelSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) |
| .addGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(statusMessageLabel) |
| .addComponent(statusAnimationLabel) |
| .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addGap(3, 3, 3)) |
| ); |
| |
| setComponent(mainPanel); |
| setMenuBar(menuBar); |
| setStatusBar(statusPanel); |
| }// </editor-fold>//GEN-END:initComponents |
| |
| // Variables declaration - do not modify//GEN-BEGIN:variables |
| private javax.swing.JPanel mainPanel; |
| private javax.swing.JMenuBar menuBar; |
| private javax.swing.JProgressBar progressBar; |
| private javax.swing.JLabel statusAnimationLabel; |
| private javax.swing.JLabel statusMessageLabel; |
| private javax.swing.JPanel statusPanel; |
| // End of variables declaration//GEN-END:variables |
| |
| private final Timer messageTimer; |
| private final Timer busyIconTimer; |
| private final Icon idleIcon; |
| private final Icon[] busyIcons = new Icon[15]; |
| private int busyIconIndex = 0; |
| |
| private JDialog aboutBox; |
| } |