📄 mainwindow.java
字号:
/* * JMule - Java file sharing client * Copyright (C) 2007-2008 JMule team ( jmule@jmule.org / http://jmule.org ) * * Any parts of this program derived from other projects, or contributed * by third-party developers are copyrighted by their respective authors. * * 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 2 * 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */package org.jmule.ui.swing.mainwindow;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.io.File;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JCheckBoxMenuItem;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JRadioButtonMenuItem;import javax.swing.JSeparator;import javax.swing.JToggleButton;import javax.swing.JToolBar;import javax.swing.KeyStroke;import javax.swing.SwingUtilities;import javax.swing.UIManager;import javax.swing.filechooser.FileSystemView;import javax.swing.plaf.ColorUIResource;import org.jmule.core.JMConstants;import org.jmule.core.JMRunnable;import org.jmule.core.JMThread;import org.jmule.core.JMuleCore;import org.jmule.core.JMuleCoreFactory;import org.jmule.core.configmanager.ConfigurationAdapter;import org.jmule.core.configmanager.ConfigurationManager;import org.jmule.core.edonkey.ServerListener;import org.jmule.core.edonkey.ServerManager;import org.jmule.core.edonkey.ServerManagerException;import org.jmule.core.edonkey.impl.Server;import org.jmule.core.peermanager.PeerManager;import org.jmule.ui.JMuleUIManager;import org.jmule.ui.localizer.Localizer;import org.jmule.ui.localizer._;import org.jmule.ui.swing.BrowserLauncher;import org.jmule.ui.swing.ImgRep;import org.jmule.ui.swing.Refreshable;import org.jmule.ui.swing.SwingGUIUpdater;import org.jmule.ui.swing.SwingPreferences;import org.jmule.ui.swing.SwingUtils;import org.jmule.ui.swing.UISwingImageRepository;import org.jmule.ui.swing.dialogs.AboutDialog;import org.jmule.ui.swing.dialogs.AdjustSpeedLimitsDialog;import org.jmule.ui.swing.maintabs.AbstractTab;import org.jmule.ui.swing.maintabs.LogTab;import org.jmule.ui.swing.maintabs.search.SearchTab;import org.jmule.ui.swing.maintabs.serverlist.ServerListTab;import org.jmule.ui.swing.maintabs.shared.SharedTab;import org.jmule.ui.swing.maintabs.statistics.StatisticsTabs;import org.jmule.ui.swing.maintabs.transfers.TransfersTab;import org.jmule.ui.swing.settings.SettingsDialog;import org.jmule.ui.swing.versionchecker.VersionChecker;import org.jmule.ui.swing.wizards.SetupWizard;import org.jmule.ui.swing.wizards.UIChooserWizad;import org.jmule.ui.utils.SpeedFormatter;/** * * @author javajox * @version $$Revision: 1.5 $$ * Last changed by $$Author: javajox $$ on $$Date: 2008/10/19 17:48:05 $$ */public class MainWindow extends JFrame implements WindowListener { private JMenuBar main_menu_bar; private JMenu file, fnew, view, tools, help, tabs; private JMenuItem new_downloads, new_servers, exit, import_server_list, ui_chooser, config_wizard, options, open_support, project_forums, bug_tracker, check_for_updates, about; private JRadioButtonMenuItem servers, transfers, search, shared_files,stats,logs; private JCheckBoxMenuItem tool_bar_visibility, status_bar_visibility; private BorderLayout border_layout0; private JToolBar main_buttons_bar; // main tabs private ServerListTab server_list_tab = new ServerListTab(this); private SearchTab search_tab = new SearchTab(this); private SharedTab shared_tab = new SharedTab(this); private TransfersTab transfers_tab = new TransfersTab(this); private StatisticsTabs statistic_tab = new StatisticsTabs(this); private LogTab log_tab = new LogTab(this); StatusBar status_bar; JPanel the_current_view = server_list_tab; private JPanel center_panel = new JPanel(); JButton connect_button; private JMuleCore _core = JMuleCoreFactory.getSingleton(); private ServerManager _server_manager = _core.getServerManager(); private SwingGUIUpdater _ui_updater = SwingGUIUpdater.getInstance(); private PeerManager _peer_manager = _core.getPeerManager(); private SwingPreferences _pref = SwingPreferences.getSingleton(); private ConfigurationManager _config = _core.getConfigurationManager(); private AbstractTab previous_panel; class JMToggleButton extends JToggleButton { public JMToggleButton() { this.setSize(new Dimension(109,61)); this.setPreferredSize(new Dimension(109,61)); this.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); this.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); } } final JMToggleButton server_list_button = new JMToggleButton(); final JMToggleButton transfers_button = new JMToggleButton(); final JMToggleButton search_button = new JMToggleButton(); final JMToggleButton shared_files_button = new JMToggleButton(); final JMToggleButton statistics_button = new JMToggleButton(); final JMToggleButton log_button = new JMToggleButton(); public MainWindow() { this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); this.addWindowListener(this); this.setIconImage(UISwingImageRepository.getImage("jmule_swing.png")); initUIComponents(); setMainMenu(); setMainButtonsBar(); server_list_button.doClick(); setStatusBar(); final ActionListener start_auto_connect_action = new ActionListener() { public void actionPerformed(ActionEvent event) { try { _server_manager.startAutoConnect(); } catch (ServerManagerException e) { e.printStackTrace(); } } }; final ActionListener stop_auto_connect_action = new ActionListener() { public void actionPerformed(ActionEvent event) { try { _server_manager.stopAutoConnect(); } catch (Throwable e) { e.printStackTrace(); } } }; final ActionListener disconnect_action = new ActionListener() { public void actionPerformed(ActionEvent event) { try { _server_manager.getConnectedServer().disconnect(); }catch(Throwable t) { t.printStackTrace(); } } }; _server_manager.addServerListener(new ServerListener() { public void connected(Server server) { LogTab.getLogInstance().addMessage("The system is connected to server = " + server); status_bar.setServerStatus(ServerStatusTypes.CONNECTED, server.getAddress() + ":" + server.getPort()); status_bar.setClientIDType( ( server.getClientID().isHighID() ? ClientIDTypes.HIGH_ID : ClientIDTypes.LOW_ID ), server.getClientID().toString()); connect_button.removeActionListener(start_auto_connect_action); connect_button.removeActionListener(stop_auto_connect_action); connect_button.addActionListener(disconnect_action); connect_button.setText("Disconnect"); connect_button.setIcon(ImgRep.getIcon("connect_drop.png")); } public void disconnected(Server server) { LogTab.getLogInstance().addMessage("The system has been disconnected from server = " + server); status_bar.setClientIDType(ClientIDTypes.NO_ID, ""); status_bar.setServerStatus(ServerStatusTypes.DISCONNECTED, null); connect_button.removeActionListener(disconnect_action); connect_button.removeActionListener(stop_auto_connect_action); connect_button.addActionListener(start_auto_connect_action); connect_button.setText("Connect"); connect_button.setIcon(ImgRep.getIcon("connect_do.png")); } public void isconnecting(Server server) { LogTab.getLogInstance().addMessage("The system is connecting to server = " + server); status_bar.setClientIDType(ClientIDTypes.NO_ID, ""); status_bar.setServerStatus(ServerStatusTypes.CONNECTING, server.getAddress() + ":" + server.getPing()); connect_button.removeActionListener(disconnect_action); connect_button.removeActionListener(start_auto_connect_action); connect_button.addActionListener(stop_auto_connect_action); connect_button.setText("Cancel"); connect_button.setIcon(ImgRep.getIcon("connect_stop.png")); } public void serverMessage(Server server, String message) { server_list_tab.setServerMessage(message); } }); connect_button.addActionListener(start_auto_connect_action); if(_pref.isConnectAtStartup()) { try { _server_manager.connect(); }catch(Throwable t) { t.printStackTrace(); } } LogTab.getLogInstance().addMessage("System started"); } public void initUIComponents() { String title = JMConstants.JMULE_FULL_NAME; this.setTitle(title); //TODO get this from CfgManager this.setSize(800, 470); this.setPreferredSize(new Dimension(800, 470)); //this.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("resources/jmule.png")).getImage()); //place the main windows in the middle of display this.setLocation(getToolkit().getScreenSize().width/2 - getWidth()/2, getToolkit().getScreenSize().height/2 - getHeight()/2); //set the main layout border_layout0 = new BorderLayout(); this.setLayout( border_layout0 ); center_panel.setLayout(new GridLayout(1,1)); this.add(center_panel, BorderLayout.CENTER); } //---------------------------------------------------------------------- private void setMainMenu() { main_menu_bar = new JMenuBar(); file = new JMenu(); fnew = new JMenu(); view = new JMenu(); tools = new JMenu(); help = new JMenu(); tabs = new JMenu(); exit = new JMenuItem(); new_downloads = new JMenuItem(); new_servers = new JMenuItem(); import_server_list = new JMenuItem(); ButtonGroup radio_button_menu_items_group = new ButtonGroup(); servers = new JRadioButtonMenuItem(); transfers = new JRadioButtonMenuItem(); search = new JRadioButtonMenuItem(); shared_files = new JRadioButtonMenuItem(); stats = new JRadioButtonMenuItem(); logs = new JRadioButtonMenuItem(); radio_button_menu_items_group.add(servers); radio_button_menu_items_group.add(transfers); radio_button_menu_items_group.add(search); radio_button_menu_items_group.add(shared_files); radio_button_menu_items_group.add(stats); radio_button_menu_items_group.add(logs); servers.setSelected(true); ui_chooser = new JMenuItem(); config_wizard = new JMenuItem(); options = new JMenuItem(); open_support = new JMenuItem(); project_forums = new JMenuItem(); bug_tracker = new JMenuItem(); check_for_updates = new JMenuItem(); about = new JMenuItem(); tool_bar_visibility = new JCheckBoxMenuItem(); status_bar_visibility = new JCheckBoxMenuItem(); tool_bar_visibility.setText("Tool bar"); status_bar_visibility.setText("Status bar"); tool_bar_visibility.setSelected(true); status_bar_visibility.setSelected(true); status_bar_visibility.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -