`
小桔子
  • 浏览: 23502 次
  • 性别: 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
分享到:
评论

相关推荐

    企业人事管理系统-——Swing+MySQL

    在人事管理系统中,Swing可以用来构建员工信息录入、查询、修改和删除等功能的交互界面,包括表格展示、按钮操作、下拉选择等元素。 MySQL,作为一款广泛使用的开源关系型数据库管理系统,以其高效、稳定和易用性...

    swing聊天室

    【Swing聊天室】是一个基于Java Swing库实现的简单在线交流平台。Swing是Java标准版(Java SE)的一部分,提供了丰富的用户界面组件,用于构建桌面应用程序。在这个聊天室项目中,用户可以通过客户端进行文字交流,...

    Java项目开发——Chat即时聊天系统[归类].pdf

    【Java项目开发——Chat即时聊天系统】是一个针对计算机科学与技术专业的实践项目,旨在让学生通过实际操作理解Java编程的核心概念和特性,同时掌握Java应用软件的开发流程。在这个项目中,学生们将使用JDK和Eclipse...

    第十八章 图形界面开发--AWT,Swing,SWT.pdf

    ### 第十八章 图形界面开发——AWT,Swing,SWT #### 18.1 图形界面简介 ##### 18.1.1 概述 在本章中,我们将探讨Java图形用户界面(GUI)开发的核心概念和技术。虽然在Java开发中,Web应用程序占据了主导地位,但...

    java实践期末项目swing有界面图书管理程序

    Java实践期末项目——Swing有界面图书管理程序 在计算机科学与信息技术领域,Java是一种广泛使用的编程语言,尤其在开发桌面应用方面,如本项目的图书管理程序。Swing是Java Standard Edition (Java SE) 中的一个...

    基于JavaSwing实现的超级马里奥小游戏

    在本项目中,“基于JavaSwing实现的超级马里奥小游戏”是一个利用Java编程语言的图形用户界面库——Java Swing,来复刻经典游戏“超级马里奥”的尝试。这个项目旨在提供一个基础的马里奥游戏框架,包括基本的游戏...

    java 图形界面程序——科研申报

    本项目“java 图形界面程序——科研申报”就是这样一个基于Java Swing的GUI应用,它旨在为科研申报提供一个友好的交互平台。Java Swing是Java Foundation Classes (JFC)的一部分,提供了丰富的组件库来构建桌面应用...

    swing 植物大战僵尸

    本次我们将深入探讨如何使用Java Swing来开发一款经典的游戏——"植物大战僵尸"。 首先,我们要理解Swing的核心概念。Swing提供了一系列的组件,如JFrame、JButton、JLabel等,这些组件可以被用来创建窗口、按钮、...

    用swing制作的简单图书管理系统

    本系统——"用Swing制作的简单图书管理系统"就是基于这一强大的库构建的。下面我们将深入探讨该系统的设计理念、主要功能以及Swing在其中的关键应用。 一、Swing基础与应用 Swing是Java Foundation Classes (JFC)的...

    数据库课程设计——图书馆管理信息系统

    这通常会涉及到Java Swing或JavaFX库,用于创建窗口、按钮、文本框等控件,实现用户输入和系统反馈。 5. **业务逻辑**:这部分涉及到系统的核心功能,如借阅流程的控制,确保同一本书不能同时被多人借阅;归还时...

    Swing+SQL Server 2000进销存管理系统

    2. 用户界面:使用 Swing 组件构建各个功能模块的界面,例如,使用 JTable 显示商品列表,JComboBox 选择供应商或客户,JTextArea 输入订单详情等。 3. 数据操作:编写 Java 类来封装数据库操作,如添加商品、更新...

    图书管理系统使用java swing组件的图书馆图书借还系统,集成条形码扫描仪.zip

    本系统——“图书管理系统使用java swing组件的图书馆图书借还系统,集成条形码扫描仪”正是为满足这一需求而设计的。该系统充分利用了Java语言的强大功能,特别是Swing组件,实现了图形用户界面(GUI),并集成了...

    swing_mysql_demo.rar_ActionIcon png_DEMO_swing mysql_swing管理系统

    标题中的"swing_mysql_demo.rar_ActionIcon png_DEMO_swing mysql_swing管理系统"表明这是一个使用Java Swing库开发的管理系统,结合了MySQL数据库,并且包含了ActionIcon的PNG图片资源,可能用于界面按钮或者菜单项...

    汽车租赁管理系统(详细文档+视频+源码)_基于java swing管理系统源码 程序 代码 图形界面.rar

    《汽车租赁管理系统——基于Java Swing的实践解析》 在当今数字化时代,汽车租赁管理系统已经成为汽车行业不可或缺的一部分,它能够高效地管理车辆租赁业务,包括车辆信息、客户信息、租赁合同、费用计算等多个方面...

    学生选课成绩信息管理系统(ER图文档+视频+源码)_基于java swing管理系统源码 程序 代码 图形界面.rar

    《学生选课成绩信息管理系统——基于Java Swing的实现详解》 在信息技术日益发达的今天,学生选课成绩信息管理系统已经成为教育领域不可或缺的一部分。本系统基于Java Swing开发,旨在提供一个直观、高效的管理平台...

    开心对对碰小游戏源码(含演示录像)_Java_Swing

    "开心对对碰小游戏源码(含演示录像)_Java_Swing" 这个标题表明我们正在讨论一个基于Java Swing技术开发的轻量级游戏——开心对对碰。它不仅包含了游戏的源代码,还提供了一个演示录像,方便开发者理解和学习。 ...

    基于java+swing图书馆管理系统源码.zip

    本系统——基于Java+Swing的图书馆管理系统,是一个典型的案例,展示了如何将这两者结合,实现一个功能完备、用户友好的图书管理平台。下面,我们将深入探讨其设计原理、主要功能以及关键实现技术。 一、系统架构与...

    精选_基于java.swing实现的发送邮件的小程序_源码打包

    【标题】"精选_基于java.swing实现的发送邮件的小程序_源码打包"指的是一个使用Java编程语言,特别是Swing库开发的桌面应用程序,它的主要功能是发送电子邮件。Swing是Java SE的一部分,提供了一组丰富的组件和工具...

    Java小游戏——雷电

    《Java小游戏——雷电》是基于Java编程语言开发的一款经典飞行射击类游戏,深受玩家喜爱。作为初涉游戏开发的尝试,它展示了Java在游戏开发领域的应用潜力。下面将详细介绍这款游戏中涉及的主要Java技术和相关知识点...

    java项目——飞机游戏

    【Java项目——飞机游戏】是一个非常适合初学者上手的编程实践项目,它主要基于Java语言进行开发,旨在帮助学习者巩固基础知识,理解面向对象编程、事件处理、图形用户界面(GUI)设计等核心概念。通过这个项目,...

Global site tag (gtag.js) - Google Analytics