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. iOS中NSString转换成HEX(十六进制)-NSData转换成int

    http://www.2cto.com/kf/201402/281501.html 1 2 3 4 5 6 NSString *str = @"0xff055008"; //先以1 ...

  2. 如何自学 Python(干货合集)

    http://wenku.baidu.com/view/5108f974192e45361066f583.html

  3. Android SurfaceView实战 带你玩转flabby bird (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42965779 ,本文出自:[张鸿洋的博客] 1.概述 哈,记得以前写过Andro ...

  4. javascript每日一练(九)——运动一:匀速运动

    一.js的运动 匀速运动 清除定时器 开启定时器 运动是否完成:a.运动完成,清除定时器:b.运动未完成继续 匀速运动停止条件:距离足够近  Math.abs(当然距离-目标距离) < 最小运动 ...

  5. Windows8下通过IPv4地址访问Tomcat

    最近在做Android开发,手机客户端需要通过IPv4地址访问电脑启动的Web应用服务. 在Windows 7不需要做什么设置,localhost,127.0.0.1或者192.168.0.100都可 ...

  6. Python调用C库

    Python调用C库 Python可以利用ctypes库很方便地调用C的库函数. C库例程: # file: a.c int sum(int a, int b){   int t = 0;   int ...

  7. LoadRunner脚本增强

    1.检查点 web_find() 和web_reg_find() 2.Block技术 如果对不同的事物进行不同次数的循环该怎么处理?默认情况下LoadRunner对所有的事物都是统一执行的,即虽然有多 ...

  8. POJ 3304 Segments(计算几何)

    意甲冠军:给出的一些段的.问:能否找到一条直线,通过所有的行 思维:假设一条直线的存在,所以必须有该过两点的线,然后列举两点,然后推断是否存在与所有的行的交点可以是 代码: #include < ...

  9. D16Pascal的编译器和IDE

    https://github.com/Memnarch/D16Pascal https://github.com/Memnarch/D16IDE https://github.com/Memnarch ...

  10. 解决Charles Response 中文乱码

    Response中文乱码:在Info.plist 中 的vmoption 添加-Dfile.encoding=UTF-8 info.plist路径 应用程序->Charles.app->显 ...