`
小桔子
  • 浏览: 22764 次
  • 性别: Icon_minigender_2
  • 来自: 贵阳
社区版块
存档分类
最新评论

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),就能正常显示了。有意思吧!

 我的实现代码

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
分享到:
评论

相关推荐

    Java课程设计实验报告及全部源码流程图.doc

    下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期 ,并能够选择背景图片): 备忘录主界面(实现备忘录的添加,及当前日历的显示): 备忘录主界面(实现...

    Java开发技术大全 电子版

    14.12GUI程序设计实例3——字体选择对话框553 14.12.1界面的实现554 14.12.2监听ListSelectionEvent事件556 14.12.3按钮响应事件556 14.12.4对话框的显示557 14.12.5返回用户选择的字体557 14.12.6如何使用...

    javaSE代码实例

    第4章 流程控制——Java世界的航行舵手 42 4.1 if条件语句 42 4.1.1 简略形式 42 4.1.2 完全形式 43 4.1.3 语句的嵌套 43 4.2 switch多分支语句 45 4.2.1 基本语法 45 4.2.2 合法的判断表达式 46 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑...

    java课程设计学生信息管理系统(1).doc

    功能级用例描述——添加学生信息 "描述项 "说明 " "用例名称 "添加学生信息 " "用例简述 "管理员添加学生的基本信息 " "用例图 " " "前置条件 "管理员已成功登入 " "后置条件 "学生信息被添加 " "基本操作流程 ...

    java源码包---java 源码 大量 实例

    原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制  Java二进制IO类与文件...

    java源码包2

    原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制  Java二进制IO类与文件...

    java源码包3

    原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制  Java二进制IO类与文件...

    java源码包4

    原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制  Java二进制IO类与文件...

    JAVA上百实例源码以及开源项目

    原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制  Java二进制IO类与文件...

    JAVA上百实例源码以及开源项目源代码

    原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制  Java二进制IO类与文件...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    Java源码包100个设计实例.zip

    EJB 模拟银行ATM流程及操作源代码 ejbCreate函数用于初始化一个EJB实例 EJB中JNDI的使用源码例子 EJB的真实世界模型(源代码).rar ftp文件传输 ftp简易服务器.rar HAHA CHAT Java仿QQ聊天程序源代码.rar html 标记...

    Java JDK实例宝典

    第1章 Java基础 1.1 转换基本数据类型 1.2 Java的运算符 1.3 控制程序的流程 1.4 计算阶乘 1.5 实现命令行程序 第2章 Java面向对象程序设计 2. 1 复数类 2. 2 equals.chashCode...

    java初学者必看

    2.6.2 Eclipse的透视图 2.6.3 Eclipse的视图(View) 2.6.4 Eclipse的编辑器 2.6.5 Eclipse的工具栏和菜单栏 2.6.6 使用Eclipse编写HelloWorld程序 2.7 本章习题 第3章 Java语言基础 3.1 标识符 3.1.1 标识符...

Global site tag (gtag.js) - Google Analytics