JSwing实现 下拉列表形式菜单

这里直接给出图片,有图有真相嘛。

JSwing实现 下拉列表形式菜单_第1张图片JSwing实现 下拉列表形式菜单_第2张图片JSwing实现 下拉列表形式菜单_第3张图片JSwing实现 下拉列表形式菜单_第4张图片

然后直接给出代码

基本思想还是事件监听和响应,使用了MouseListener,但是最关键的还是布局Layout的灵活使用。如果需要添加更多的菜单,布局的还需要修改!(这个方法实现起来不方便,因为组合情况太多,不容易添加新的按钮,不是非常推荐,可以看我的这篇文章《利用简单的自由布局实现实现下来列表式菜单》)

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;

public class Menulist extends JFrame implements MouseListener {

	private static final long serialVersionUID = -6050868817749702480L;
	/**
	 * @param args
	 */

	private JButton menulistButton1;
	private JLabel menulistButton1_1;
	private JLabel menulistButton1_2;
	private JLabel menulistButton1_3;
	private JButton menulistButton2;
	private JLabel menulistButton2_1;
	private JLabel menulistButton2_2;
	private JLabel menulistButton2_3;
	private JButton menulistButton3;
	private JLabel menulistButton3_1;
	private JLabel menulistButton3_2;
	private JLabel menulistButton3_3;
	private JPanel mainPanel;
	private JPanel buttonPanel1;
	private JPanel buttonPanel2;
	private JPanel buttonPanel3;

	public Menulist(String title) {
		super(title);
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		mainPanel = new JPanel();
		setLayout(new GridLayout(1, 1));
		add(mainPanel);
		mainPanel.setLayout(new GridBagLayout());

		buttonPanel1 = new JPanel();
		GridBagConstraints GBC = new GridBagConstraints();
		GBC.gridx = 0;
		GBC.gridy = 0;
		GBC.fill = GridBagConstraints.BOTH;
		mainPanel.add(buttonPanel1, GBC);

		buttonPanel2 = new JPanel();
		GBC.gridx = 0;
		GBC.gridy = 1;
		mainPanel.add(buttonPanel2, GBC);

		buttonPanel3 = new JPanel();
		GBC.gridx = 0;
		GBC.gridy = 2;
		mainPanel.add(buttonPanel3, GBC);

		buttonPanel1.setLayout(new GridLayout(1, 1));
		buttonPanel2.setLayout(new GridLayout(1, 1));
		buttonPanel3.setLayout(new GridLayout(10, 1));

		menulistButton1 = new JButton("menulist1_0");
		menulistButton1_1 = new JLabel("menulist1_1");
		menulistButton1_2 = new JLabel("menulist1_2");
		menulistButton1_3 = new JLabel("menulist1_3");
		menulistButton2 = new JButton("menulist2_0");
		menulistButton2_1 = new JLabel("menulist2_1");
		menulistButton2_2 = new JLabel("menulist2_2");
		menulistButton2_3 = new JLabel("menulist2_3");
		menulistButton3 = new JButton("menulist3_0");
		menulistButton3_1 = new JLabel("menulist3_1");
		menulistButton3_2 = new JLabel("menulist3_2");
		menulistButton3_3 = new JLabel("menulist3_3");

		buttonPanel1.add(menulistButton1);
		buttonPanel2.add(menulistButton2);
		buttonPanel3.add(menulistButton3);

		menulistButton1_1.setHorizontalAlignment((int) CENTER_ALIGNMENT);
		menulistButton1_2.setHorizontalAlignment((int) CENTER_ALIGNMENT);
		menulistButton1_3.setHorizontalAlignment((int) CENTER_ALIGNMENT);
		menulistButton2_1.setHorizontalAlignment((int) CENTER_ALIGNMENT);
		menulistButton2_2.setHorizontalAlignment((int) CENTER_ALIGNMENT);
		menulistButton2_3.setHorizontalAlignment((int) CENTER_ALIGNMENT);
		menulistButton3_1.setHorizontalAlignment((int) CENTER_ALIGNMENT);
		menulistButton3_2.setHorizontalAlignment((int) CENTER_ALIGNMENT);
		menulistButton3_3.setHorizontalAlignment((int) CENTER_ALIGNMENT);

		menulistButton1.addMouseListener(this);
		menulistButton2.addMouseListener(this);
		menulistButton3.addMouseListener(this);
		menulistButton1_1.addMouseListener(this);
		menulistButton1_2.addMouseListener(this);
		menulistButton1_3.addMouseListener(this);
		menulistButton2_1.addMouseListener(this);
		menulistButton2_2.addMouseListener(this);
		menulistButton2_3.addMouseListener(this);
		menulistButton3_1.addMouseListener(this);
		menulistButton3_2.addMouseListener(this);
		menulistButton3_3.addMouseListener(this);
		pack();
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new Menulist("menulistList - Ben Zeph").setVisible(true);
			}
		});
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		if (menulistButton1.equals(e.getSource())) {
			if (!menulistButton1_1.isValid()// 000
					&& !menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel1.removeAll();
				buttonPanel1.setLayout(new GridLayout(4, 1));
				buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel1.add(menulistButton1);
				buttonPanel1.add(menulistButton1_1);
				buttonPanel1.add(menulistButton1_2);
				buttonPanel1.add(menulistButton1_3);
			} else if (!menulistButton1_1.isValid()// 001
					&& !menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel1.removeAll();
				buttonPanel1.setLayout(new GridLayout(4, 1));
				buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel1.add(menulistButton1);
				buttonPanel1.add(menulistButton1_1);
				buttonPanel1.add(menulistButton1_2);
				buttonPanel1.add(menulistButton1_3);
			} else if (!menulistButton1_1.isValid()// 010
					&& menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel1.removeAll();
				buttonPanel1.setLayout(new GridLayout(4, 1));
				buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(4, 1));
				buttonPanel1.add(menulistButton1);
				buttonPanel1.add(menulistButton1_1);
				buttonPanel1.add(menulistButton1_2);
				buttonPanel1.add(menulistButton1_3);

			} else if (!menulistButton1_1.isValid()// 011
					&& menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel1.removeAll();
				buttonPanel1.setLayout(new GridLayout(4, 1));
				buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(4, 1));
				buttonPanel1.add(menulistButton1);
				buttonPanel1.add(menulistButton1_1);
				buttonPanel1.add(menulistButton1_2);
				buttonPanel1.add(menulistButton1_3);
			} else if (menulistButton1_1.isValid()// 100
					&& !menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel1.removeAll();
				buttonPanel1.setLayout(new GridLayout(1, 1));
				buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(10, 1));
				buttonPanel1.add(menulistButton1);
			} else if (menulistButton1_1.isValid()// 101
					&& !menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel1.removeAll();
				buttonPanel1.setLayout(new GridLayout(1, 1));
				buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(10, 1));
				buttonPanel1.add(menulistButton1);
			} else if (menulistButton1_1.isValid()// 110
					&& menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel1.removeAll();
				buttonPanel1.setLayout(new GridLayout(1, 1));
				buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel1.add(menulistButton1);
			} else if (menulistButton1_1.isValid()// 111
					&& menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel1.removeAll();
				buttonPanel1.setLayout(new GridLayout(1, 1));
				buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel1.add(menulistButton1);
			}

			buttonPanel1.repaint();
			buttonPanel1.updateUI();
		} else if (menulistButton2.equals(e.getSource())) {
			if (!menulistButton1_1.isValid()// 000
					&& !menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel2.removeAll();
				buttonPanel1.setLayout(new GridLayout(1, 1));
				buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel2.add(menulistButton2);
				buttonPanel2.add(menulistButton2_1);
				buttonPanel2.add(menulistButton2_2);
				buttonPanel2.add(menulistButton2_3);
			} else if (!menulistButton1_1.isValid()// 001
					&& !menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel2.removeAll();
				buttonPanel1.setLayout(new GridLayout(1, 1));
				buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel2.add(menulistButton2);
				buttonPanel2.add(menulistButton2_1);
				buttonPanel2.add(menulistButton2_2);
				buttonPanel2.add(menulistButton2_3);
			} else if (!menulistButton1_1.isValid()// 010
					&& menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel2.removeAll();
				buttonPanel1.setLayout(new GridLayout(1, 1));
				buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(10, 1));
				buttonPanel2.add(menulistButton2);
			} else if (!menulistButton1_1.isValid()// 011
					&& menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel2.removeAll();
				buttonPanel1.setLayout(new GridLayout(1, 1));
				buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(10, 1));
				buttonPanel2.add(menulistButton2);
			} else if (menulistButton1_1.isValid()// 100
					&& !menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel2.removeAll();
				buttonPanel1.setLayout(new GridLayout(4, 1));
				buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(4, 1));
				buttonPanel2.add(menulistButton2);
				buttonPanel2.add(menulistButton2_1);
				buttonPanel2.add(menulistButton2_2);
				buttonPanel2.add(menulistButton2_3);
			} else if (menulistButton1_1.isValid()// 101
					&& !menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel2.removeAll();
				buttonPanel1.setLayout(new GridLayout(4, 1));
				buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(4, 1));
				buttonPanel2.add(menulistButton2);
				buttonPanel2.add(menulistButton2_1);
				buttonPanel2.add(menulistButton2_2);
				buttonPanel2.add(menulistButton2_3);
			} else if (menulistButton1_1.isValid()// 110
					&& menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel2.removeAll();
				buttonPanel1.setLayout(new GridLayout(4, 1));
				buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel2.add(menulistButton2);
			} else if (menulistButton1_1.isValid()// 111
					&& menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel2.removeAll();
				buttonPanel1.setLayout(new GridLayout(4, 1));
				buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel2.add(menulistButton2);
			}

			buttonPanel2.repaint();
			buttonPanel2.updateUI();
		} else if (menulistButton3.equals(e.getSource())) {
			if (!menulistButton1_1.isValid()// 000
					&& !menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel3.removeAll();
				// buttonPanel1.setLayout(new GridLayout(1, 1));
				// buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(10, 1));
				buttonPanel3.add(menulistButton3);
				buttonPanel3.add(menulistButton3_1);
				buttonPanel3.add(menulistButton3_2);
				buttonPanel3.add(menulistButton3_3);
			} else if (!menulistButton1_1.isValid()// 001
					&& !menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel3.removeAll();
				// buttonPanel1.setLayout(new GridLayout(1, 1));
				// buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(10, 1));
				buttonPanel3.add(menulistButton3);
			} else if (!menulistButton1_1.isValid()// 010
					&& menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel3.removeAll();
				// buttonPanel1.setLayout(new GridLayout(1, 1));
				// buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel3.add(menulistButton3);
				buttonPanel3.add(menulistButton3_1);
				buttonPanel3.add(menulistButton3_2);
				buttonPanel3.add(menulistButton3_3);
			} else if (!menulistButton1_1.isValid()// 011
					&& menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel3.removeAll();
				// buttonPanel1.setLayout(new GridLayout(1, 1));
				// buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel3.add(menulistButton3);
			} else if (menulistButton1_1.isValid()// 100
					&& !menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel3.removeAll();
				// buttonPanel1.setLayout(new GridLayout(4, 1));
				// buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel3.add(menulistButton3);
				buttonPanel3.add(menulistButton3_1);
				buttonPanel3.add(menulistButton3_2);
				buttonPanel3.add(menulistButton3_3);
			} else if (menulistButton1_1.isValid()// 101
					&& !menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel3.removeAll();
				// buttonPanel1.setLayout(new GridLayout(4, 1));
				// buttonPanel2.setLayout(new GridLayout(1, 1));
				buttonPanel3.setLayout(new GridLayout(7, 1));
				buttonPanel3.add(menulistButton3);
			} else if (menulistButton1_1.isValid()// 110
					&& menulistButton2_1.isValid()
					&& !menulistButton3_1.isValid()) {
				buttonPanel3.removeAll();
				// buttonPanel1.setLayout(new GridLayout(4, 1));
				// buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(4, 1));
				buttonPanel3.add(menulistButton3);
				buttonPanel3.add(menulistButton3_1);
				buttonPanel3.add(menulistButton3_2);
				buttonPanel3.add(menulistButton3_3);
			} else if (menulistButton1_1.isValid()// 111
					&& menulistButton2_1.isValid()
					&& menulistButton3_1.isValid()) {
				buttonPanel3.removeAll();
				// buttonPanel1.setLayout(new GridLayout(4, 1));
				// buttonPanel2.setLayout(new GridLayout(4, 1));
				buttonPanel3.setLayout(new GridLayout(4, 1));
				buttonPanel3.add(menulistButton3);
			}

			buttonPanel3.repaint();
			buttonPanel3.updateUI();
		}
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		if (menulistButton1_1.equals(e.getSource())) {
			menulistButton1_1.setBorder(new LineBorder(Color.BLACK));
			menulistButton1_1.setBackground(Color.green);
		} else if (menulistButton1_2.equals(e.getSource())) {
			menulistButton1_2.setBorder(new LineBorder(Color.BLACK));
		} else if (menulistButton1_3.equals(e.getSource())) {
			menulistButton1_3.setBorder(new LineBorder(Color.BLACK));
		} else if (menulistButton2_1.equals(e.getSource())) {
			menulistButton2_1.setBorder(new LineBorder(Color.BLACK));
		} else if (menulistButton2_2.equals(e.getSource())) {
			menulistButton2_2.setBorder(new LineBorder(Color.BLACK));
		} else if (menulistButton2_3.equals(e.getSource())) {
			menulistButton2_3.setBorder(new LineBorder(Color.BLACK));
		} else if (menulistButton3_1.equals(e.getSource())) {
			menulistButton3_1.setBorder(new LineBorder(Color.BLACK));
		} else if (menulistButton3_2.equals(e.getSource())) {
			menulistButton3_2.setBorder(new LineBorder(Color.BLACK));
		} else if (menulistButton3_3.equals(e.getSource())) {
			menulistButton3_3.setBorder(new LineBorder(Color.BLACK));
		}
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		if (menulistButton1_1.equals(e.getSource())) {
			menulistButton1_1.setBorder(null);
		} else if (menulistButton1_2.equals(e.getSource())) {
			menulistButton1_2.setBorder(null);
		} else if (menulistButton1_3.equals(e.getSource())) {
			menulistButton1_3.setBorder(null);
		} else if (menulistButton2_1.equals(e.getSource())) {
			menulistButton2_1.setBorder(null);
		} else if (menulistButton2_2.equals(e.getSource())) {
			menulistButton2_2.setBorder(null);
		} else if (menulistButton2_3.equals(e.getSource())) {
			menulistButton2_3.setBorder(null);
		} else if (menulistButton3_1.equals(e.getSource())) {
			menulistButton3_1.setBorder(null);
		} else if (menulistButton3_2.equals(e.getSource())) {
			menulistButton3_2.setBorder(null);
		} else if (menulistButton3_3.equals(e.getSource())) {
			menulistButton3_3.setBorder(null);
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub

	}

}


 

你可能感兴趣的:(String,layout,null,Class,import,alignment)