这里直接给出图片,有图有真相嘛。
然后直接给出代码
基本思想还是事件监听和响应,使用了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
}
}