📄 editor.java
字号:
"Could not set value " + i + " for user " + data.getValueAt(userRow, UserTableModel.USER_NAME) + " because:\n\n " + ex); } } } data.fireTableDataChanged(); try { data.writeBackUserAt(userRow, true, true); } catch (Exception ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(Editor.this.getTopLevelAncestor(), "Could not save data for user " + data.getValueAt(userRow, UserTableModel.USER_NAME) + " because:\n\n " + ex); } // After the new user has been added, sort the main table data.sortByUserName(); data.fireTableDataChanged(); } } }; popupMenu.add(action); RowSelectionListener listener = new RowSelectionListener(); table.addMouseListener(listener); scroller.addMouseListener(listener); } private class RowSelectionListener extends MouseAdapter { public void mouseReleased(MouseEvent e) { if ((e.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) { // This is still not right. Needs more work. The problem is that the // e.getx method does not return the correct value once the table has // been scrolled. int width = Editor.this.getWidth(); int modx = e.getX() % width; int height = Editor.this.getHeight(); int mody = e.getY() % height; popupMenu.show(Editor.this, modx, mody); } } } private class ColumnModelListener implements ActionListener { private Vector removedUserColumns = new Vector(); private Vector removedAdminColumns = new Vector(); public void actionPerformed(ActionEvent e) { TableColumnModel columnModel = table.getColumnModel(); JCheckBox source = (JCheckBox) e.getSource(); if (source == showAdminColumns) { // The panel where users are edited may have not been created if one of // the system configuration files was missing from the pserver if (userPanel != null) { userPanel.setShowAdmin(source.isSelected()); } if (source.isSelected()) // add columns { int max = removedAdminColumns.size(); for (int i = 0; i < max; i++) { ColumnInfo column = (ColumnInfo) removedAdminColumns.elementAt(0); removedAdminColumns.remove(0); columnModel.addColumn(column); if (columnModel.getColumnCount() - 1 > column.getPosition()) { columnModel.moveColumn(columnModel.getColumnCount() - 1, column.getPosition()); } } } else // remove columns { for (int i = 0; i < data.getColumns().length; i++) { ColumnInfo column = data.getColumns()[i]; if (data.getAdminColumnIndices().contains(new Integer(column.getPosition()))) { Enumeration columnsInModel = columnModel.getColumns(); while (columnsInModel.hasMoreElements()) { Object columnInModel = columnsInModel.nextElement(); if (columnInModel.equals(column)) { columnModel.removeColumn(column); removedAdminColumns.add(column); } // end if model contains column } // end while } } } } // end source = admin else if (source == showUserColumns) { if (userPanel != null) { userPanel.setShowUser(source.isSelected()); } if (source.isSelected()) // add columns { int max = removedUserColumns.size(); for (int i = 0; i < max; i++) { ColumnInfo column = (ColumnInfo) removedUserColumns.elementAt(0); removedUserColumns.remove(0); columnModel.addColumn(column); if (columnModel.getColumnCount() - 1 > column.getPosition()) { columnModel.moveColumn(columnModel.getColumnCount() - 1, column.getPosition()); } } } // end if add columns else // remove columns { for (int i = 0; i < data.getColumns().length; i++) { ColumnInfo column = data.getColumns()[i]; // if this is a user column if (data.getUserColumnIndices().contains(new Integer(column.getPosition()))) { Enumeration columnsInModel = columnModel.getColumns(); while (columnsInModel.hasMoreElements()) { Object columnInModel = columnsInModel.nextElement(); if (columnInModel.equals(column)) { columnModel.removeColumn(column); removedUserColumns.add(column); } // end if model contains column } // end while } // end if this is a user column } // end for all columns } // end remove user columns } } // end method actionPerformed } private void createButtons() { showAdminColumns = new JCheckBox("Show admin data"); showAdminColumns.setSelected(true); showAdminColumns.addActionListener(columnListener); showUserColumns = new JCheckBox("Show user data"); showUserColumns.setSelected(false); showUserColumns.addActionListener(columnListener); JButton loadAll = new JButton("Load all users"); loadAll.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadAllUsers(); } }); showAliases = new JCheckBox("Show aliases"); showAliases.setSelected(false); showAliases.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (showAliases.isSelected()) { data.showAliases(true); } else { data.showAliases(false); } } }); JButton find = new JButton("Find"); find.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { findDialog.setVisible(true); } }); find.setToolTipText("Scroll to user with a given name"); // layout the buttons in the panel JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); panel.add(loadAll); panel.add(find); panel.add(Box.createHorizontalGlue()); panel.add(showAliases); panel.add(showAdminColumns); panel.add(showUserColumns); add(panel, BorderLayout.SOUTH); } public void loadUserNames() { TaskLoadUserNames task = new TaskLoadUserNames(this); task.start(); } public void loadAllUsers() { TaskLoadAllUsers task = new TaskLoadAllUsers(this); task.start(); } // end method loadAllUsers /** * The renderer used to draw any cells which may have an on/off or true/false * value as a check box instead of a string. <p> * The checkbox cannot simply be used as the default renderer for the * concerned columns because they may not always have a value displayed in * them. When the data is not loaded yet from the provisioning server, the * value of these columns will be an empty string which will cause an * exception if a check box rendrer is used. So this class returns a check * box for cases where the value is loaded and an empty text label for cases * where it is not. */ private class UserRenderer extends DefaultTableCellRenderer { private JCheckBox check = new JCheckBox(); UserRenderer() { super(); check.setHorizontalAlignment(check.CENTER); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { TableModel model = table.getModel(); Component renderer = this; // display the true/false and on/off values as check boxes int modelColumn = table.convertColumnIndexToModel(column); if (model.getValueAt(row, modelColumn).equals("true") || model.getValueAt(row, modelColumn).equals("ON")) { check.setSelected(true); renderer = check; } else if (model.getValueAt(row, modelColumn).equals("false") || model.getValueAt(row, modelColumn).equals("OFF")) { check.setSelected(false); renderer = check; } else if (model.getValueAt(row, UserTableModel.IS_ALIAS).equals("true")) { // make the aliases italic value = "<html><font color=gray size=-1><i>" + value.toString() + "</i></font>"; } setValue(value); setFont(table.getFont()); if (isSelected) { renderer.setBackground(table.getSelectionBackground()); renderer.setForeground(table.getSelectionForeground()); } else { renderer.setBackground(table.getBackground()); renderer.setForeground(table.getForeground()); } return renderer; } } public void showUserEditorDialog() { userEditorDialog.pack(); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); if (userEditorDialog.getHeight() > d.getHeight() - 80) { userEditorDialog.setSize(new Dimension(userEditorDialog.getWidth() + 20, (int) d.getHeight() - 80)); } userEditorDialog.setVisible(true); } public JTable getTable() { return table; } public UserTableModel getData() { return data; } public UserPanel getUserPanel() { return userPanel; } public JDialog getUserEditorDialog() { return userEditorDialog; } public boolean isShowAdminColumnsSelected() { return showAdminColumns.isSelected(); } public boolean isShowUserColumnsSelected() { return showUserColumns.isSelected(); }} // end class JPanel
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -