这仅仅是个入门教程,当你认为自己不是处于牛A和牛C之间时倒可以看看;我也不会蛋疼得去做一个Netbeans,仅仅是处出于对Netbeans的钟爱和对Swing的探讨而拿来的练手。
这里只打算实现Netbeans的总体界面布局,以后有时间的话会陆续补上各个模块;别指望这里有详细的说明,明细的图列,只有代码在说话!先看看效果是不是你要的先:
废话不多说,贴代码:
package com.monitor1394.netbeans.ui; import javax.swing.JFrame; /** * Netbeans主界面 * * @author monitor * Created on 2011-2-24, 23:28:07 */ public class NetbeansUI extends JFrame { public NetbeansUI(){ initComponents(); } /** 初始化组件 */ private void initComponents(){ setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Netbeans IDE 6.9.1"); initMenuBar(); initToolBar(); initMainPanel(); pack(); setExtendedState(JFrame.MAXIMIZED_BOTH); } /** 初始化菜单栏 */ private void initMenuBar(){ } /** 初始化工具栏 */ private void initToolBar(){ } /** 初始化界面主框架 */ private void initMainPanel(){ } }
其中:
setExtendedState(JFrame.MAXIMIZED_BOTH);
用于设置最大化模式。若要居中显示可用:
setLocationRelativeTo(getOwner());
这里只是加上菜单,并未设置导航或快捷键等功能:
/** 初始化菜单栏 */ private void initMenuBar(){ JMenuBar menuBar; menuBar=new JMenuBar(); JMenu fileMenu=new JMenu("文件(F)"); menuBar.add(fileMenu); JMenu editMenu=new JMenu("编辑(E)"); menuBar.add(editMenu); JMenu viewMenu=new JMenu("视图(V)"); menuBar.add(viewMenu); JMenu leadMenu=new JMenu("导航(V)"); menuBar.add(leadMenu); JMenu sourceMenu=new JMenu("源(S)"); menuBar.add(sourceMenu); JMenu refactorMenu=new JMenu("重构(A)"); menuBar.add(refactorMenu); JMenu runMenu=new JMenu("运行(R)"); menuBar.add(runMenu); JMenu debugMenu=new JMenu("调试(D)"); menuBar.add(debugMenu); JMenu analyseMenu=new JMenu("分析(P)"); menuBar.add(analyseMenu); JMenu termMenu=new JMenu("团队开发(M)"); menuBar.add(termMenu); JMenu toolMenu=new JMenu("工具(T)"); menuBar.add(toolMenu); JMenu windowMenu=new JMenu("窗口(W)"); menuBar.add(windowMenu); JMenu helpMenu=new JMenu("帮助(H)"); menuBar.add(helpMenu); setJMenuBar(menuBar); }
带图标和tip显示:
/** 初始化工具栏 */ private void initToolBar(){ JToolBar toolBar=new JToolBar(); toolBar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204))); toolBar.setRollover(true); toolBar.setBorderPainted(true); JButton newFileButton=new JButton(createImageIcon("icons/12.PNG","")); newFileButton.setToolTipText("新建文件...(Ctrl+N)"); newFileButton.setFocusable(false); newFileButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); newFileButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); newFileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { } }); toolBar.add(newFileButton); JButton newProjectButton=new JButton(createImageIcon("icons/project.PNG","")); newProjectButton.setToolTipText("新建项目...(Ctrl+Shift+N)"); newProjectButton.setFocusable(false); newProjectButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); newProjectButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); newProjectButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { } }); toolBar.add(newProjectButton); JButton openProjectButton=new JButton(createImageIcon("icons/13.PNG","")); openProjectButton.setToolTipText("打开项目...(Ctrl+Shift+O)"); openProjectButton.setFocusable(false); openProjectButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); openProjectButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); openProjectButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { } }); toolBar.add(openProjectButton); JButton saveAllButton=new JButton(createImageIcon("icons/14.PNG","")); saveAllButton.setToolTipText("保存所有文件(如果启用了/"在保存时编译/"功能,此操作还会编译/生产文件)(Ctrl+Shift+S)"); saveAllButton.setFocusable(false); saveAllButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); saveAllButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); saveAllButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { } }); toolBar.add(saveAllButton); getContentPane().add(toolBar, java.awt.BorderLayout.PAGE_START); }
类似Netbeans中的可拖动的左右上右下布局一直是我想要的,以前也不知要怎样实现。其实用JSplitPane大体可实现,说大体是因为暂时还无法做到和Netbeans一样,多嵌套更是严重不符;先做出大体效果先:
/** 初始化界面主框架 */ private void initMainPanel(){ JPanel centerPanel=new JPanel(); centerPanel.setLayout(new java.awt.GridLayout()); JSplitPane leftSplitPane =new JSplitPane(); leftSplitPane.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); leftSplitPane.setResizeWeight(0.2); JPanel leftPanel=new JPanel(); leftPanel.setLayout(new java.awt.GridLayout()); JTabbedPane leftTabbedPane=new JTabbedPane(); leftPanel.add(leftTabbedPane); leftSplitPane.setLeftComponent(leftPanel); JPanel rightPanel=new JPanel(); rightPanel.setLayout(new java.awt.GridLayout()); JTabbedPane workTabbedPane=new JTabbedPane(); workTabbedPane.add("NetbeansUI.java", new JPanel()); workTabbedPane.add("Netbeans.java", new JPanel()); JSplitPane downSplitPane =new JSplitPane(); downSplitPane.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); downSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); downSplitPane.setResizeWeight(0.8); downSplitPane.setTopComponent(workTabbedPane); JTabbedPane downTabbedPane=new JTabbedPane(); downTabbedPane.add("输出", new JPanel()); downSplitPane.setBottomComponent(downTabbedPane); rightPanel.add(downSplitPane); leftSplitPane.setRightComponent(rightPanel); centerPanel.add(leftSplitPane); getContentPane().add(centerPanel, java.awt.BorderLayout.CENTER); //底部状态栏 JPanel bottomPanel=new JPanel(); bottomPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204))); bottomPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT)); bottomPanel.add(new JLabel("Netbeans IDE(run)")); bottomPanel.add(new JProgressBar()); bottomPanel.add(new JLabel("INS")); getContentPane().add(bottomPanel, java.awt.BorderLayout.PAGE_END); }
一个简单的界面就做好了。当我们希望右边的NetbeansUI.java和Netbeans.java两个标签能关闭时怎么办呢,下一教程我们就来尝试一下。