java 控制表项删除、编辑、添加(实现接口)
package com.platformda.optimize; import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor; /**
*
* @author Administrator
*/
public class OptDurationManager { public OptDurationManager() {
}
OptDurationManager mOptDurationManager;
JButton addButton = new JButton();
JButton delButton = new JButton();
JButton editButton = new JButton();
ImageIcon addIcon = new ImageIcon();
ImageIcon delIcon = new ImageIcon();
ImageIcon editIcon = new ImageIcon();
OptAlgorithmManager manager = new OptAlgorithmManager();
List<OptAlgorithm> algorithms = OptAlgorithmManager.getAllAlgorithms();
List<OptAlgorithm> addAlgorithms = new ArrayList<OptAlgorithm>();
String[] columnName = {"AlgorithmName", "Duration"};
String[][] rowData;
String[] addRowData;
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable();
JScrollPane scrollPane = new JScrollPane();
DefaultListModel listModel;
JList optAlgorithmList;
JScrollPane AddAlgorithmScroll;
JPanel tableJPanel = new JPanel();
JPanel headerJPanel = new JPanel();
JPanel addJPanel = new JPanel();
JPanel addCenterJPanel = new JPanel();
JPanel editJPanel = new JPanel();
Point mousePoint;
String AlgorithmName;
int delRow;
static int addRow;
static OptSettingEditor settingEditor;
static OptSetting setting;
DialogDescriptor AddDescriptor;
DialogDescriptor EditDescriptor; public void DurationManager() {
JFrame mJFrame = new JFrame();
mJFrame.setLayout(new BorderLayout());
mJFrame.add(initTableJScrollPane(), BorderLayout.CENTER);
mJFrame.add(tableHeader(), BorderLayout.NORTH);
mJFrame.setBounds(300, 300, 300, 100);
mJFrame.setTitle("OptDurationManager");
mJFrame.pack();
mJFrame.setVisible(true);
mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public JPanel initTableJScrollPane() {
int i = 0;
rowData = new String[algorithms.size()][2];
for (OptAlgorithm mAlgorithm : algorithms) {
rowData[i][0] = mAlgorithm.getName();
rowData[i][1] = String.valueOf(i++);
} model = new DefaultTableModel(rowData, columnName);
table = new JTable(model);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
mousePoint = e.getPoint();
AlgorithmName = table.getValueAt(table.rowAtPoint(mousePoint), 0).toString();
System.out.println("(TableRow) " + table.rowAtPoint(mousePoint) + " : " + AlgorithmName);
}
}); scrollPane = new JScrollPane(table);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); tableJPanel.setLayout(new BorderLayout());
tableJPanel.add(scrollPane, BorderLayout.NORTH); return tableJPanel;
} public JPanel tableHeader() { headerJPanel.setLayout(new BorderLayout()); addIcon = new ImageIcon("Picture/add.png");
addButton.setIcon(addIcon);
addButton.setToolTipText("add");
delIcon = new ImageIcon("Picture/remove.png");
delButton.setIcon(delIcon);
delButton.setToolTipText("remove");
editIcon = new ImageIcon("Picture/edit.png");
editButton.setIcon(editIcon);
editButton.setToolTipText("edit"); delButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
delRow = table.rowAtPoint(mousePoint);
if (delRow != -1) {
int delresponse = JOptionPane.showConfirmDialog(null, "Are you sure to remove ?", "Warning", JOptionPane.OK_CANCEL_OPTION);
if (delresponse == JOptionPane.OK_OPTION) {
model.removeRow(table.rowAtPoint(mousePoint));
for (OptAlgorithm mAlgorithm : algorithms) {
if (AlgorithmName.equals(mAlgorithm.getName())) {
addAlgorithms.add(mAlgorithm);
}
}
System.out.println("(Table)RowCount: " + table.getRowCount());
}
}
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, "please choose remove item first ! ");
}
}
});
//问题1:删除后点击编辑,还可以编辑:连续点多次删除,会逐行删除,接着点击编辑,会编辑连续删除中的第一个
//问题2:个数多于algorithms.size()的无法编辑(增添的行数已经增加到table中,并且可以获取)
//---编辑是按行数来,删除后,也会出现编辑不对应的情况...
//解决问题2:获取该行的mAlgorithm.getName(),然后遍历寻找该algorithm,即可实现对应,且不论行数为多少都可编辑
editButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
try { for (OptAlgorithm mAlgorithm : algorithms) {
if (AlgorithmName.equals(mAlgorithm.getName())) {
setting = mAlgorithm.getSetting();
settingEditor = mAlgorithm.getOptSettingEditor();
}
}
editJPanel.setLayout(new BorderLayout());
editJPanel.add(settingEditor.getEditorComponent(), BorderLayout.NORTH); EditDescriptor = new DialogDescriptor(editJPanel, AlgorithmName, true,
DialogDescriptor.OK_CANCEL_OPTION, DialogDescriptor.OK_OPTION, null);
Object result = DialogDisplayer.getDefault().notify(EditDescriptor); // displays the dialog
if (result == NotifyDescriptor.OK_OPTION) {
if (settingEditor.stopEditing()) {
}
editJPanel.removeAll();
} else if (result == NotifyDescriptor.CANCEL_OPTION) {
editJPanel.removeAll();
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "please choose edit item first !");
}
}
}); //问题3:点击jlist后所显示的面板无法全显,解决:增加JList每个单元格的高度
//已实现:如果某一个algorithm已经修改数据,那么在add时,点击该algorithm会显示已经修改过的值;
//如果删除该algorithm,则再添加时点击该algorithm会显示最初的值
//可改进:只有没有的algorithm,才需要添加;遇到的问题是:弹出的对话框太小。。。
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
addJPanel.removeAll();
addJPanel.setLayout(new BorderLayout()); listModel = new DefaultListModel();
for (OptAlgorithm mAlgorithm : algorithms) {
listModel.addElement(mAlgorithm.getName());
}
optAlgorithmList = new JList(listModel);
optAlgorithmList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
optAlgorithmList.setFixedCellWidth(80);
optAlgorithmList.setFixedCellHeight(32); AddAlgorithmScroll = new JScrollPane(optAlgorithmList);
AddAlgorithmScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); addCenterJPanel.setLayout(new BorderLayout());
//没有设置大小的效果。。
addCenterJPanel.setSize(1000, 1000);
// addCenterJPanel.setBounds(new Rectangle(500, 1000)); setting = algorithms.get(0).getSetting();
settingEditor = algorithms.get(0).getOptSettingEditor();
addCenterJPanel.add(settingEditor.getEditorComponent(), BorderLayout.NORTH);
addJPanel.add(addCenterJPanel, BorderLayout.CENTER); optAlgorithmList.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
try {
addRow = optAlgorithmList.getSelectedIndex();
System.out.println("(JListRow) " + addRow + " : " + optAlgorithmList.getSelectedValue().toString());
addCenterJPanel.removeAll();
setting = algorithms.get(addRow).getSetting();
settingEditor = algorithms.get(addRow).getOptSettingEditor();
addCenterJPanel.add(settingEditor.getEditorComponent(), BorderLayout.NORTH);
addJPanel.add(addCenterJPanel, BorderLayout.CENTER);
addJPanel.validate();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error !");
}
}
});
addJPanel.add(AddAlgorithmScroll, BorderLayout.WEST); AddDescriptor = new DialogDescriptor(addJPanel, "addAlgorithm", true,
DialogDescriptor.OK_CANCEL_OPTION, DialogDescriptor.OK_OPTION, null);
Object result = DialogDisplayer.getDefault().notify(AddDescriptor); // displays the dialog addRowData = new String[2];
if (result == NotifyDescriptor.OK_OPTION) {
addRowData[0] = algorithms.get(addRow).getName();
addRowData[1] = String.valueOf(0);
model.addRow(addRowData);
} else if (result == NotifyDescriptor.CANCEL_OPTION) {
}
}
}); JToolBar tableToolBar = new JToolBar();
tableToolBar.add(addButton);
tableToolBar.add(delButton);
tableToolBar.add(editButton);
headerJPanel.add(tableToolBar, BorderLayout.NORTH); return headerJPanel;
}
}
今天把前几天写的代码重写了一下,昨天写的被主管批了一顿,想想,的确挺垃圾的,就是玩码字的,java实现的是一种接口思想。
今天写的是200多行,实现的是昨天500多行的作用,也算是一点进步吧。
java 控制表项删除、编辑、添加(实现接口)的更多相关文章
- 表单的编辑添加和删除 .removeClass() .append() .preAll() .attr('b') document.createElement()
1.$(..).removeClass() 去除属性 2$(..).append 把内容加在后面 3.$(..).preAll() 前面所有的兄弟属性 4.$(..).attr('b') 属性 ...
- JAVA循环迭代中删除或添加集合数据报java.util.ConcurrentModificationException错误
1.写出下面的输出结果 public class test{ public static void main(String [] args) List<String> list = new ...
- cmd中删除、添加、修改注册表命令
转自:http://www.jb51.net/article/30586.htm regedit的运行参数 REGEDIT [/L:system] [/R:user] filename1 REGEDI ...
- HTML基础第五讲---控制表格及其表项的对齐方式
转自:https://i.cnblogs.com/posts?categoryid=1121494 缺省情况下,表格在浏览器屏幕上左对齐,你可以使用<TABLE>的ALIGN属性来指定表格 ...
- 注册表的作用、bat文件中REG ADD命令添加注册表项以及bat
注册表的用途与设置 注册表是windows的核心,里面储存着大量的系统信息,说白了就是一个庞大的数据库.如果你不懂什么是数据库,那没关系,不影响你了解注册表,不过最好对数据库有所了解.注册表里面所有的 ...
- delphi 注册表操作(读取、添加、删除、修改)完全手册
DELPHI VS PASCAL(87) 32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(82)-Easyui Datagrid批量操作(编辑,删除,添加)
前言 有时候我们的后台系统表单比较复杂,做过进销存或者一些销售订单的都应该有过感觉 虽然Easyui Datagrid提供了行内编辑,但是不够灵活,但是我们稍微修改一下来达到批量编辑,批量删除,批量添 ...
- SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束
创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...
- 【转】C#程序打包安装部署之添加注册表项
今天为大家整理了一些怎样去做程序安装包的具体文档,这些文档并不能确保每个人在做安装包的时候都能正确去生成和运行,但是这些文档的指导作用对于需要的朋友来说还是很有必要的,在实际产品的安装部署过程中可能有 ...
随机推荐
- iOS开发笔记--使用blend改变图片颜色
最近对Core Animation和Core Graphics的内容东西比较感兴趣,自己之前也在这块相对薄弱,趁此机会也想补习一下这块的内容,所以之后几篇可能都会是对CA和CG学习的记录的文章. 在应 ...
- Android Matrix(坐标矩阵)
Android Matrix 2016-02-26 14:38:10 介绍 中文名:坐标矩阵 高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 在Android里面,Matr ...
- 利用MySQL 的GROUP_CONCAT函数实现聚合乘法
MySQL 聚合函数里面提供了加,平均数.最小,最大等,可是没有提供乘法,我们这里来利用MYSQL现有的GROUP_CONCAT函数实现聚合乘法. 先创建一张演示样例表: CREATE TABLE ` ...
- C++成员变量与函数内存分配
关于结构体和C++类的内存地址问题 C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样的.下面我们以类来说明问题,如果类的问题通了,结构体也也就没问题啦 ...
- 第一个Spark程序
1.Java下Spark开发环境搭建(from http://www.cnblogs.com/eczhou/p/5216918.html) 1.1.jdk安装 安装oracle下的jdk,我安装的是j ...
- ultraedit比较两个文件差异经验
链接地址:http://jingyan.baidu.com/article/fcb5aff7876551edab4a714b.html 程序开发人员经常要使用到两个文件的对比,有很多工具可以实现该功能 ...
- BZOJ 3477: [Usaco2014 Mar]Sabotage( 二分答案 )
先二分答案m, 然后对于原序列 A[i] = A[i] - m, 然后O(n)找最大连续子序列和, 那么此时序列由 L + mx + R组成. L + mx + R = sum - n * m, s ...
- android4.0移植,拨号异常
D/dalvikvm( 2274): GC_CONCURRENT freed 206K, 12% free 6571K/7431K, paused 2ms+3ms D/dalvikvm( 2274): ...
- vim添加删除多行注释
CTRL+V进入可视化模式 移动光标上移或者下移,选中多行的开头 选择完毕后,按大写的的I键,此时下方会提示进入“insert”模式,输入你要插入的注释符 最后按ESC键,你就会发现多行代码已经被注释 ...
- 在WINDOWS下 三步快速配置 eclipse c++ 环境
所需软件 1.Eclipse IDE for C/C++ Developers http://www.eclipse.org/downloads/packages/eclipse-ide-cc-dev ...