Swing开发——流程图按钮选择效果实现_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Swing开发——流程图按钮选择效果实现

Swing开发——流程图按钮选择效果实现

 2014/5/7 15:49:41  小桔子  程序员俱乐部  我要评论(0)
  • 摘要:还有人用Swing吗?!!!感觉自己的表达能力好弱,问题总是描述不清楚。每次说什么很难让对方准确的明白我所想表达的,有的时候自己都感觉自己说不清。逻辑思维能弱咩?多练练吧!有幸开发swing桌面应用,太有意思了。开发一个类似于word,小画家的应用,今天准备实现画流程这一块的内容,在工具栏中添加流程图按钮,简单的矩形、圆角矩形、菱形、箭头、圆形。用过word的都知道,选中按钮的背景颜色会变成橘黄色,让用户一眼就看出来自己选择了什么按钮。只需要被选中的那个按钮变色,之前被选中的得恢复到常态
  • 标签:实现 流程 开发 Swing

?????? 还有人用Swing吗?!!!大笑

????? 感觉自己的表达能力好弱,问题总是描述不清楚。每次说什么很难让对方准确的明白我所想表达的,有的时候自己都感觉自己说不清。逻辑思维能弱咩?多练练吧!

??????? 有幸开发swing桌面应用,太有意思了。开发一个类似于word,小画家的应用,今天准备实现画流程这一块的内容,在工具栏中添加流程图按钮,简单的矩形、圆角矩形、菱形、箭头、圆形。用过word的都知道,选中按钮的背景颜色会变成橘黄色,让用户一眼就看出来自己选择了什么按钮。只需要被选中的那个按钮变色,之前被选中的得恢复到常态;

setBackground(Color.white);//常态

当我是setBackground(new Color(204,255,168,81));来设置为被选中的颜色的时候有意思的事情发生了,第一个参数是半透明效果,问题是这么做的话会导致多个按钮胡乱重叠,也就是界面绘制的时候一个按钮下出现了多个图形,我猜想是界面绘制的问题,于是我显示的调用了

mJFrame.validate();// 重构内容面板????????
mJFrame.repaint();// 重绘内容面板?

这样做,当前选中的图形中还会出现其他的图形。后来去掉了这个含有半透明的参数的颜色new Color(204,255,168,81)),改成new Color(255,168,81),就能正常显示了。有意思吧!

?我的实现代码

class="java">import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JToolBar;

public class MToolBar extends JToolBar{
	/**工具欄
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<JButton> flowLis;
	private String[] actionPerformArray;
	private JButton rect;//矩形
	private JButton roundRect;//流程圖開始
	private JButton diamond;//菱形
	private JButton arrowLeft;//向左的箭頭
    private JButton arrowRight;//向右的箭頭
    private JButton arrowUp;//向上箭頭
    private JButton arrowDown;//向下箭頭
    private JButton round;//圓形
    private String actionIndex="0";//用來記錄流程途中被按下按鈕的索引
	private boolean DEBUG=true;//

	public MToolBar(){
		initComponent();
		add(createSchemeFlow());//添加流程圖的
		addSeparator();
	}
	private void initComponent()
	{
		rect=new JButton();//矩形
		roundRect=new JButton();//流程圖開始
		diamond=new JButton();//菱形
		arrowLeft=new JButton();//向左的箭頭
	    arrowRight=new JButton();//向右的箭頭
	    arrowUp=new JButton();//向上箭頭
	    arrowDown=new JButton();//向下箭頭
	    round=new JButton();//圓形
	    flowLis=new ArrayList<JButton>();
	    flowLis.add(rect);
	    flowLis.add(roundRect);
	    flowLis.add(diamond);
	    flowLis.add(arrowLeft);
	    flowLis.add(arrowRight);
	    flowLis.add(arrowUp);
	    flowLis.add(arrowDown);
	    flowLis.add(round);
	    actionPerformArray="rect,roundRect,diamond,arrowLeft,arrowRight,arrowUp,arrowDown,round".split(",");//數組添加item的順序和List的順序保持一致,能按照index一一對應
	    setBackgroudColor();
	   
	}
	protected void setBackgroudColor()
	{
		   rect.setBackground(Color.white);
		   roundRect.setBackground(Color.white);
		   diamond.setBackground(Color.white); 
		   arrowLeft.setBackground(Color.white);
		   arrowRight.setBackground(Color.white);
		   arrowUp.setBackground(Color.white);
		   arrowDown.setBackground(Color.white);
		   round.setBackground(Color.white);
	}
	private class  MyActionListener implements ActionListener
    {

		@Override
		public void actionPerformed(ActionEvent e) {
			int index=0;
			if(!(e.getActionCommand().equals(actionIndex)))
			{
				index=Integer.parseInt(actionIndex);
				flowLis.get(index).setBackground(Color.white);//原來被按下的按鈕恢復為白色
			}
			   
			    actionIndex=e.getActionCommand();
			    index=Integer.parseInt(actionIndex);
			    //  flowLis.get(index).setBackground(new Color(204,255,168,81));
			    flowLis.get(index).setBackground(new Color(255,168,81));//正被按下的按鈕顏色設置為橘黃色
			    if(DEBUG)
			    {
			    System.out.println("button"+actionPerformArray[Integer.parseInt(e.getActionCommand())]+"被點擊了"); 
			    }
		}
		;
    };
	protected JPanel createSchemeFlow()
	{
		JPanel jpanel=new JPanel();
		jpanel.setLayout(null);
		jpanel.setPreferredSize(new Dimension(120, 0));
		jpanel.setBorder(BorderFactory.createTitledBorder("流程圖"));
		JPanel flow=new JPanel(new GridLayout(2, 4, -1, -1));
	   
	    for(int i=0;i<flowLis.size();i++)
	    {
		    flowLis.get(i).setIcon(new ImageIcon("images/"+actionPerformArray[i]+".png"));
		    if(DEBUG)
		    {
		    System.out.println("奇怪");
		    }
	    	flowLis.get(i).setActionCommand(i+"");
	    	flowLis.get(i).addActionListener(new MyActionListener());
	    	flow.add(flowLis.get(i));
	    }
	    flow.setBounds(5, 15, 140, 70);
	    jpanel.add(flow);
		return jpanel;
	}
}

?

?

?

?

?

  • 大小: 57.4 KB
  • 查看图片附件
发表评论
用户名: 匿名