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 控制表项删除、编辑、添加(实现接口)的更多相关文章

  1. 表单的编辑添加和删除 .removeClass() .append() .preAll() .attr('b') document.createElement()

    1.$(..).removeClass()   去除属性 2$(..).append 把内容加在后面 3.$(..).preAll()  前面所有的兄弟属性 4.$(..).attr('b')  属性 ...

  2. JAVA循环迭代中删除或添加集合数据报java.util.ConcurrentModificationException错误

    1.写出下面的输出结果 public class test{ public static void main(String [] args) List<String> list = new ...

  3. cmd中删除、添加、修改注册表命令

    转自:http://www.jb51.net/article/30586.htm regedit的运行参数 REGEDIT [/L:system] [/R:user] filename1 REGEDI ...

  4. HTML基础第五讲---控制表格及其表项的对齐方式

    转自:https://i.cnblogs.com/posts?categoryid=1121494 缺省情况下,表格在浏览器屏幕上左对齐,你可以使用<TABLE>的ALIGN属性来指定表格 ...

  5. 注册表的作用、bat文件中REG ADD命令添加注册表项以及bat

    注册表的用途与设置 注册表是windows的核心,里面储存着大量的系统信息,说白了就是一个庞大的数据库.如果你不懂什么是数据库,那没关系,不影响你了解注册表,不过最好对数据库有所了解.注册表里面所有的 ...

  6. delphi 注册表操作(读取、添加、删除、修改)完全手册

    DELPHI VS PASCAL(87)  32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(82)-Easyui Datagrid批量操作(编辑,删除,添加)

    前言 有时候我们的后台系统表单比较复杂,做过进销存或者一些销售订单的都应该有过感觉 虽然Easyui Datagrid提供了行内编辑,但是不够灵活,但是我们稍微修改一下来达到批量编辑,批量删除,批量添 ...

  8. SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束

    创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...

  9. 【转】C#程序打包安装部署之添加注册表项

    今天为大家整理了一些怎样去做程序安装包的具体文档,这些文档并不能确保每个人在做安装包的时候都能正确去生成和运行,但是这些文档的指导作用对于需要的朋友来说还是很有必要的,在实际产品的安装部署过程中可能有 ...

随机推荐

  1. svn密码问题

    官方书籍version control with svn提到了这个问题: Disabling Password Caching When you perform a Subversion operat ...

  2. 基于visual Studio2013解决算法导论之051区间树

     题目 区间树 解决代码及点评 #include <stdio.h> #include <string.h> #include <iostream> #def ...

  3. 给centOs添加epel源

    epel简介: https://fedoraproject.org/wiki/EPEL/zh-cn 1. rpm -Uvh http://dl.fedoraproject.org/pub/epel/5 ...

  4. windows下以指定用户访问SMB服务器进行读写

    需求:最近要开发某系统前端界面,但是该系统是部署在linux服务器上,前端是用php开发,实时调试运行需要linux下系统环境支持, 每次修改都需要手动传到服务器上,尤其是debug阶段,每修改一点就 ...

  5. 闲扯 Javascript 00

    引言 Javascript  的作用在此就不阐述了,相信你已经知道它的用途!那我说点什么呢? 不如就和大家先扯一把,后面的工作 随后后展开吧! 首先声明:我个人对Javascript 认识,我只知道它 ...

  6. js判断IP js判断域名

    <html> <head> <script language="javascript" type="text/javascript" ...

  7. VC2008如何生成及使用DLL(图文并茂,完整版)

    博客分类: Dot net VC2008 DLL Dot net   生成.使用DLL看起来简单,但做起来才发现还是有一些地方需要注意的. 1. 打开VS2008,新建一个VC工程,选择Win32类型 ...

  8. Qt学习之路(54): 自定义拖放数据对象

    前面的例子都是使用的系统提供的拖放对象 QMimeData 进行拖放数据的存储,比如使用 QMimeData::setText() 创建文本,使用 QMimeData::urls() 创建 URL 对 ...

  9. 基于visual Studio2013解决算法导论之008快速排序算法

     题目 快速排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...

  10. Gora_百度百科

    Gora_百度百科     Gora    编辑    目录         1什么是Apache Gora         2为什么要使用Apache Gora         3Gora的一个源代 ...