JavaSwing 简单模拟Mac Finder
为了方便切换,我把Panel和JFrame分开了。之前画了个用的Netbeans,但是感觉毕竟没有手写的方便扩展。
NetBeans画的:
代码写的:
MainFrame.java:
package org.javaweb.burp.test; import java.awt.Dimension; import javax.swing.JFrame; /** * * @author yz */ public class MainFrame extends JFrame { private static final long serialVersionUID = 1L; public MainFrame() { initComponents(); } private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); this.setTitle("测试"); this.add(new ApplicationPanel()); int screenWidth = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width; int screenHeight = java.awt.Toolkit.getDefaultToolkit().getScreenSize().height; Dimension d = this.getPreferredSize(); this.setBounds(screenWidth / 2 - (d.width / 2), screenHeight / 2 - (d.height / 2), d.width, d.height); pack(); } public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new MainFrame().setVisible(true); } }); } }
ApplicationPanel.java:
package org.javaweb.burp.test; import java.awt.Color; import javax.swing.GroupLayout; import javax.swing.ImageIcon; import javax.swing.JLabel; /** * * @author yz */ public class ApplicationPanel extends javax.swing.JPanel { /** * Creates new form ApplicationPanel */ public ApplicationPanel() { initComponents(); } // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jSplitPane1 = new javax.swing.JSplitPane(); jPanel1 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jPanel3 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); jPanel1.setMinimumSize(new java.awt.Dimension(200, 100)); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 196, Short.MAX_VALUE) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 592, Short.MAX_VALUE) ); jScrollPane1.setViewportView(jPanel3); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 596, Short.MAX_VALUE) ); jSplitPane1.setLeftComponent(jPanel1); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 777, Short.MAX_VALUE) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 596, Short.MAX_VALUE) ); jSplitPane1.setRightComponent(jPanel2); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jSplitPane1) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jSplitPane1) ); initPanel(); }// </editor-fold> private void initPanel() { JLabel jLabel1 = new JLabel("主页", new ImageIcon(this.getClass().getClassLoader().getResource("images/menu_bar_home_icon.png")), JLabel.LEFT); JLabel jLabel2 = new JLabel("我的应用", new ImageIcon(this.getClass().getClassLoader().getResource("images/menu_bar_app_icon.png")), JLabel.LEFT); JLabel jLabel3 = new JLabel("任务列表", new ImageIcon(this.getClass().getClassLoader().getResource("images/menu_bar_file_icon.png")), JLabel.LEFT); final JLabel[] jLabelArray = new JLabel[]{jLabel1, jLabel2, jLabel3}; javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); //水平组 GroupLayout.SequentialGroup horizontalGroup = jPanel3Layout.createSequentialGroup(); //垂直租 GroupLayout.SequentialGroup verticalGroup = jPanel3Layout.createSequentialGroup(); horizontalGroup.addGap(10);//设置水平间距 GroupLayout.ParallelGroup pg = jPanel3Layout.createParallelGroup(); for (final JLabel jLabel : jLabelArray) { jLabel.setOpaque(true);//设置为不透明 jLabel.setBackground(null);//默认去掉背景 jLabel.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { //设置边框 for (JLabel jLabel2 : jLabelArray) { if (jLabel == jLabel2) { jLabel2.setBackground(new Color(204, 204, 204)); } else { jLabel2.setBackground(null); } } } }); pg.addComponent(jLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE); verticalGroup.addGap(5);//设置垂直间隔 verticalGroup.addGroup(jPanel3Layout.createParallelGroup().addComponent(jLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)); } horizontalGroup.addGroup(pg); jPanel3Layout.setHorizontalGroup(horizontalGroup); jPanel3Layout.setVerticalGroup(verticalGroup); } // Variables declaration - do not modify private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JSplitPane jSplitPane1; // End of variables declaration }
代码中用到的三张小图:
这几张图是我从Mac Finder上扣的有点搓,需要放到src/images目录下。