зеркало из https://github.com/mozilla/pjs.git
696 строки
24 KiB
Java
696 строки
24 KiB
Java
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License
|
|
* Version 1.0 (the "License"); you may not use this file except in
|
|
* compliance with the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS"
|
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
|
* the License for the specific language governing rights and limitations
|
|
* under the License.
|
|
*
|
|
* The Original Code is the Grendel mail/news client.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
* Corporation. Portions created by Netscape are Copyright (C) 1997
|
|
* Netscape Communications Corporation. All Rights Reserved.
|
|
*/
|
|
|
|
package grendel.addressbook;
|
|
|
|
import grendel.addressbook.addresscard.*;
|
|
import grendel.widgets.CollapsiblePanel;
|
|
import grendel.widgets.GrendelToolBar;
|
|
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import java.io.*;
|
|
import java.util.*;
|
|
import java.util.Vector;
|
|
|
|
import javax.swing.*;
|
|
import javax.swing.text.*;
|
|
import javax.swing.AbstractAction;
|
|
import javax.swing.ImageIcon;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.table.*;
|
|
//import javax.swing.table.DefaultTableModel;
|
|
import javax.swing.event.TableModelEvent;
|
|
import javax.swing.border.EmptyBorder;
|
|
|
|
import netscape.ldap.*;
|
|
|
|
/**
|
|
*
|
|
* @author Lester Schueler
|
|
*/
|
|
public class AddressBook extends JFrame {
|
|
private Hashtable mCommands;
|
|
private Hashtable mMenuItems;
|
|
|
|
private JMenuBar mMenubar;
|
|
private GrendelToolBar mTtoolbar;
|
|
// private Component mStatusbar;
|
|
private JTable mTable;
|
|
private JButton mSearchButton;
|
|
protected DataSourceList mDataSourceList;
|
|
protected JComboBox mSearchSource;
|
|
protected JTextField mSearchField;
|
|
|
|
public static void main(String[] args) {
|
|
AddressBook AddressBookFrame = new AddressBook();
|
|
AddressBookFrame.addWindowListener(new AppCloser());
|
|
AddressBookFrame.show();
|
|
}
|
|
|
|
protected static final class AppCloser extends WindowAdapter {
|
|
public void windowClosing(WindowEvent e) {
|
|
System.exit(0);
|
|
}
|
|
}
|
|
|
|
//***************************
|
|
class DataSource {
|
|
private String mReadableName;
|
|
private String mDomainName;
|
|
private int mPort;
|
|
|
|
DataSource (String aReadableName, String aDomainName) {
|
|
this (aReadableName, aDomainName, 389);
|
|
}
|
|
|
|
DataSource (String aReadableName, String aDomainName, int aPort) {
|
|
mReadableName = aReadableName;;
|
|
mDomainName = aDomainName;
|
|
mPort = aPort;
|
|
}
|
|
|
|
public String getReadableName () { return mReadableName; }
|
|
public String getDomainName () { return mDomainName; }
|
|
public int getPort () { return mPort; }
|
|
}
|
|
|
|
//***************************
|
|
class DataSourceList {
|
|
private Vector mDataSources;
|
|
|
|
DataSourceList () {
|
|
mDataSources = new Vector ();
|
|
}
|
|
|
|
public Enumeration getEnumeration () { return mDataSources.elements(); }
|
|
public void addEntry (DataSource aDataSource) { mDataSources.addElement (aDataSource); }
|
|
|
|
public DataSource find (String aReadableName) {
|
|
for (Enumeration e = mDataSources.elements() ; e.hasMoreElements() ;) {
|
|
DataSource ds = (DataSource) e.nextElement();
|
|
|
|
if (ds.getReadableName ().equalsIgnoreCase(aReadableName))
|
|
return ds;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public AddressBook() {
|
|
super("Address Book");
|
|
|
|
setBackground(Color.lightGray);
|
|
//setBorderStyle(JPanel.ETCHED);
|
|
setLayout(new BorderLayout());
|
|
|
|
// addWindowListener(new FrameHider());
|
|
|
|
//create menubar (top)
|
|
//merge both the editors commands with this applications commands.
|
|
// mMenubar = NsMenuManager.createMenuBar("grendel.addressbook.Menus", "grendel.addressbook.MenuLabels", "mainMenubar", defaultActions);
|
|
|
|
//collapsble panels holds toolbar.
|
|
CollapsiblePanel collapsePanel = new CollapsiblePanel(true);
|
|
collapsePanel.setBorder (new EmptyBorder(5,5,5,5));
|
|
|
|
//toolbar buttons
|
|
mTtoolbar = createToolbar();
|
|
|
|
//collapsible item
|
|
collapsePanel.add(mTtoolbar);
|
|
|
|
//create status bar (bottom)
|
|
// mStatusbar = createStatusbar();
|
|
|
|
JPanel panel1 = new JPanel();
|
|
panel1.setLayout(new BorderLayout());
|
|
panel1.add(collapsePanel, BorderLayout.NORTH);
|
|
|
|
//hack togetther the data sources.
|
|
mDataSourceList = new DataSourceList ();
|
|
mDataSourceList.addEntry (new DataSource ("Four11 Directory", "ldap.four11.com"));
|
|
mDataSourceList.addEntry (new DataSource ("InfoSpace Directory", "ldap.infospace.com"));
|
|
mDataSourceList.addEntry (new DataSource ("WhoWhere Directory", "ldap.whowhere.com"));
|
|
|
|
//Create address panel
|
|
AddressPanel addressPanel = new AddressPanel (mDataSourceList);
|
|
panel1.add(addressPanel, BorderLayout.CENTER);
|
|
|
|
add(mMenubar, BorderLayout.NORTH);
|
|
add(panel1, BorderLayout.CENTER);
|
|
|
|
setSize (600, 400);
|
|
}
|
|
|
|
/**
|
|
* Hide this frame.
|
|
*/
|
|
protected void hideThisFrame () {
|
|
setVisible(false);
|
|
}
|
|
|
|
/**
|
|
* Handles windowClosing for window listener.
|
|
*/
|
|
protected class FrameHider extends WindowAdapter {
|
|
public void windowClosing(WindowEvent e) {
|
|
hideThisFrame();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Find the hosting frame, for the file-chooser dialog.
|
|
*/
|
|
protected Frame getParentFrame() {
|
|
// for (Container p = getParent(); p != null; p = p.getParent()) {
|
|
// if (p instanceof Frame) {
|
|
// return (Frame) p;
|
|
// }
|
|
// }
|
|
return this;
|
|
}
|
|
|
|
//**********************
|
|
//**********************
|
|
// menus
|
|
private JMenuBar menubar;
|
|
|
|
//"File" actions
|
|
public static final String newCardTag ="newCard";
|
|
public static final String newListTag ="newList";
|
|
public static final String importTag ="import";
|
|
public static final String saveAsTag ="saveAs";
|
|
public static final String callTag ="call";
|
|
public static final String closeWindowTag ="closeWindow";
|
|
|
|
// "file->new" actions
|
|
public static final String navigatorWindowTag ="navigatorWindow";
|
|
public static final String messageTag ="message";
|
|
public static final String blankPageTag ="blankPage";
|
|
public static final String pageFromTemplateTag ="pageFromTemplate";
|
|
public static final String pageFromWizardTag ="pageFromWizard";
|
|
|
|
//"Edit" actions
|
|
public static final String undoTag ="undo";
|
|
public static final String redoTag ="redo";
|
|
public static final String deleteTag ="delete";
|
|
public static final String searchDirectoryTag ="searchDirectory";
|
|
public static final String HTMLDomainsTag ="HTMLDomains";
|
|
public static final String cardPropertiesTag ="cardProperties";
|
|
public static final String preferencesTag ="preferences";
|
|
|
|
//"View" actions
|
|
public static final String hideMessageToolbarTag ="hideMessageToolbar";
|
|
public static final String byTypeTag ="byType";
|
|
public static final String byNameTag ="byName";
|
|
public static final String byEmailAddressTag ="byEmailAddress";
|
|
public static final String byComapanyTag ="byComapany";
|
|
public static final String byCityTag ="byCity";
|
|
public static final String byNicknameTag ="byNickname";
|
|
public static final String sortAscendingTag ="sortAscending";
|
|
public static final String sortDescendingTag ="sortDescending";
|
|
public static final String myAddressBookCardTag ="myAddressBookCard";
|
|
|
|
// --- action implementations -----------------------------------
|
|
private Action[] defaultActions = {
|
|
//"File" actions
|
|
new NewCard(),
|
|
// new NewList(),
|
|
// new Import(),
|
|
new SaveAs(),
|
|
// new Call(),
|
|
new CloseWindow()
|
|
|
|
// "file->new" actions
|
|
// new NavigatorWindow(),
|
|
// new Message(),
|
|
// new BlankPage(),
|
|
// new PageFromTemplate(),
|
|
// new PageFromWizard(),
|
|
|
|
//"Edit" actions
|
|
// new Undo(),
|
|
// new Redo(),
|
|
// new Delete(),
|
|
// new SearchDirectory(),
|
|
// new HTMLDomains(),
|
|
// new CardProperties(),
|
|
// new Preferences(),
|
|
|
|
//"View" actions
|
|
// new HideMessageToolbar(),
|
|
// new ByType(),
|
|
// new ByName(),
|
|
// new ByEmailAddress(),
|
|
// new ByCompany(),
|
|
// new ByCity(),
|
|
// new ByNickname(),
|
|
// new SortAscending(),
|
|
// new SortDescending(),
|
|
// new MyAddressBookCard(),
|
|
// new WrapLongLines()
|
|
};
|
|
|
|
//-----------------------
|
|
//"File" actions
|
|
//-----------------------
|
|
/**
|
|
*/
|
|
class NewCard extends AbstractAction {
|
|
NewCard() {
|
|
super(newCardTag);
|
|
setEnabled(true);
|
|
}
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
NewCardDialog aDialog = new NewCardDialog(getParentFrame());
|
|
|
|
//display the new card dialog
|
|
aDialog.show ();
|
|
aDialog.dispose();
|
|
}
|
|
}
|
|
|
|
class SaveAs extends AbstractAction {
|
|
SaveAs() {
|
|
super(saveAsTag);
|
|
setEnabled(true);
|
|
}
|
|
public void actionPerformed(ActionEvent ae) {
|
|
NewCardDialog aDialog = new NewCardDialog(getParentFrame());
|
|
|
|
//display the new card dialog
|
|
aDialog.show ();
|
|
aDialog.dispose();
|
|
}
|
|
}
|
|
|
|
class CloseWindow extends AbstractAction {
|
|
CloseWindow() {
|
|
super(closeWindowTag);
|
|
setEnabled(true);
|
|
}
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
//hide after send.
|
|
hideThisFrame();
|
|
}
|
|
}
|
|
|
|
//-----------------------
|
|
// "file->new" actions
|
|
//-----------------------
|
|
|
|
//-----------------------
|
|
//"Edit" actions
|
|
//-----------------------
|
|
class Undo extends AbstractAction {
|
|
Undo() {
|
|
super(undoTag);
|
|
setEnabled(true);
|
|
}
|
|
public void actionPerformed(ActionEvent e) {}
|
|
}
|
|
|
|
//-----------------------
|
|
//"View" actions
|
|
//-----------------------
|
|
class HideMessageToolbar extends AbstractAction {
|
|
HideMessageToolbar() {
|
|
super(hideMessageToolbarTag);
|
|
setEnabled(true);
|
|
}
|
|
|
|
public void actionPerformed(ActionEvent e) {}
|
|
}
|
|
|
|
//-----------------------
|
|
//-----------------------
|
|
class Search extends AbstractAction {
|
|
Search() {
|
|
super(newListTag);
|
|
setEnabled(true);
|
|
}
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
String readableName = (String) mSearchSource.getSelectedItem();
|
|
int index = mSearchSource.getSelectedIndex();
|
|
|
|
DataSource ds = mDataSourceList.find (readableName);
|
|
if (null != ds) {
|
|
|
|
//get the text to search for.
|
|
String textToSearchFor = mSearchField.getText();
|
|
|
|
if (!textToSearchFor.trim().equals ("")) {
|
|
DataModel dm = (DataModel) mTable.getModel ();
|
|
dm.reloadData (ds.getDomainName(), ds.getPort(), textToSearchFor);
|
|
|
|
//repaint the table with results.
|
|
mTable.repaint();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create a Toolbar
|
|
* @see addToolbarButton
|
|
*/
|
|
private GrendelToolBar createToolbar() {
|
|
|
|
GrendelToolBar toolBar = new GrendelToolBar();
|
|
addToolbarButton(toolBar, null, "images/newcard.gif", "Create a new card");
|
|
addToolbarButton(toolBar, null, "images/newlist.gif", "Create a new list");
|
|
addToolbarButton(toolBar, null, "images/properties.gif", "Edit the selected card");
|
|
addToolbarButton(toolBar, null, "images/newmsg.gif", "New Message (Ctrl+M)");
|
|
addToolbarButton(toolBar, null, "images/directory.gif", "Look up an address");
|
|
addToolbarButton(toolBar, null, "images/call.gif", "Start Netscape Conference");
|
|
addToolbarButton(toolBar, null, "images/delete.gif", "Delete selected cards <Del>");
|
|
|
|
return toolBar;
|
|
}
|
|
|
|
/**
|
|
* create a toolbar button
|
|
* @param aToolBar The parent toolbar to add this button to.
|
|
* @param aActionListener Who you want to be notified when the button is pressed.
|
|
* @param aImageName The image name for the button. like "save.gif"
|
|
* @param aToolTip The buttons tool tip. like "Save the current file".
|
|
* @see createToolbar
|
|
*/
|
|
public void addToolbarButton(GrendelToolBar aToolBar, AbstractAction aActionListener, String aImageName, String aToolTip) {
|
|
JButton b = new JButton();
|
|
|
|
b.setHorizontalTextPosition(JButton.CENTER);
|
|
b.setVerticalTextPosition(JButton.BOTTOM);
|
|
b.setToolTipText(aToolTip);
|
|
|
|
// URL iconUrl = getClass().getResource("images/" + gifName + ".gif");
|
|
b.setIcon(new ImageIcon(getClass().getResource(aImageName)));
|
|
|
|
// iconUrl = getClass().getResource("images/" + gifName + "-disabled.gif");
|
|
// button.setDisabledIcon(ImageIcon.createImageIcon(iconUrl));
|
|
|
|
// iconUrl = getClass().getResource("images/" + gifName + "-depressed.gif");
|
|
// button.setPressedIcon(ImageIcon.createImageIcon(iconUrl));
|
|
|
|
// iconUrl = getClass().getResource("images/" + gifName + "-rollover.gif");
|
|
// button.setRolloverIcon(ImageIcon.createImageIcon(iconUrl));
|
|
|
|
|
|
// JButton b = new JButton(new ImageIcon(aImageName));
|
|
// b.setToolTipText(aToolTip);
|
|
// b.setPad(new Insets(3,3,3,3));
|
|
// b.addActionListener(aActionListener);
|
|
|
|
aToolBar.add(b);
|
|
}
|
|
|
|
private String getFirstEnum (Enumeration enumVals) {
|
|
if (enumVals.hasMoreElements())
|
|
return (String) enumVals.nextElement();
|
|
|
|
return null;
|
|
}
|
|
|
|
public Vector queryLDAP (String aServerName, int aPort, String aSearchString) {
|
|
|
|
Vector retVecVec = new Vector(); //return vector of vectors.
|
|
|
|
// try {
|
|
//open a connection to the LDAP server
|
|
System.out.println ("Opening server");
|
|
ICardSource Four11AddressBook = new LDAP_Server (aServerName);
|
|
|
|
//create the query
|
|
ITerm query = new TermEqual (new AC_Attribute ("sn", aSearchString));
|
|
|
|
String[] attributes = {"sn", "cn", "o", "mail", "city"};
|
|
|
|
//query the LDAP server.
|
|
System.out.println ("Send query");
|
|
ICardSet cardSet = Four11AddressBook.getCardSet (query, attributes);
|
|
|
|
//Sort the list.
|
|
// String[] sortOrder = {"givenname", "surname"};
|
|
// cardSet.sort (sortOrder);
|
|
|
|
//hack. I've put the for loop in a try block to catch the exception
|
|
//thrown when cardEnum.hasMoreElements() incorrectly returns true.
|
|
try {
|
|
//enumerate thru the cards.
|
|
for (Enumeration cardEnum = cardSet.getEnumeration(); cardEnum.hasMoreElements(); ) {
|
|
System.out.println ("got card");
|
|
ICard card = (ICard) cardEnum.nextElement(); //get the addres card
|
|
IAttributeSet attrSet = card.getAttributeSet (); //get the attributes for this card
|
|
Vector thisRow = new Vector(6); //create a simple vector to hold the attributes values for this card.
|
|
|
|
String commonName = "";
|
|
String organization = "";
|
|
String mail = "";
|
|
String phone = "";
|
|
String city = "";
|
|
String nickName = "";
|
|
|
|
// enumerate thru the card attributes.
|
|
for (Enumeration attEnum = attrSet.getEnumeration(); attEnum.hasMoreElements(); ) {
|
|
IAttribute attr = (IAttribute) attEnum.nextElement();
|
|
String attrName = attr.getName();
|
|
|
|
if (attrName.equals ("cn")) {
|
|
commonName = attr.getValue();
|
|
}
|
|
|
|
else if (attrName.equals ("o")) {
|
|
organization = attr.getValue();
|
|
}
|
|
|
|
else if (attrName.equals ("mail")) {
|
|
mail = attr.getValue();
|
|
}
|
|
}
|
|
|
|
//create this row for the table.
|
|
thisRow.addElement (commonName);
|
|
thisRow.addElement (mail);
|
|
thisRow.addElement (organization);
|
|
thisRow.addElement (phone);
|
|
thisRow.addElement (city);
|
|
thisRow.addElement (nickName);
|
|
|
|
//add this row to the table
|
|
retVecVec.addElement (thisRow);
|
|
}
|
|
}
|
|
catch (Exception e) {
|
|
}
|
|
// }
|
|
// catch( LDAPException e ) {
|
|
// System.out.println( "Error: " + e.toString() );
|
|
// }
|
|
|
|
System.out.println ("Done.");
|
|
return retVecVec;
|
|
}
|
|
|
|
public class DataModel extends AbstractTableModel {
|
|
private Vector mVecVec;
|
|
private String[] mColumnNames;
|
|
|
|
public DataModel (String[] aNames) {
|
|
super();
|
|
mVecVec = new Vector ();
|
|
mColumnNames = aNames;
|
|
}
|
|
|
|
public int getRowCount() { return mVecVec.size(); }
|
|
public int getColumnCount () { return mColumnNames.length; }
|
|
public String getColumnName(int column) { return mColumnNames[column]; }
|
|
public Class getColumnClass(int col) { return String.class; }
|
|
public boolean isCellEditable(int row, int col) { return false;}
|
|
|
|
public void setValueAt(Object aValue, int row, int column) {
|
|
((Vector)mVecVec.elementAt(row)).setElementAt(aValue, column);
|
|
}
|
|
|
|
public void reloadData (String aServerName, int aPort, String aSearchString) {
|
|
//reload the data from LDAP.
|
|
mVecVec = queryLDAP (aServerName, aPort, aSearchString);
|
|
}
|
|
|
|
public Object getValueAt(int row, int column) {
|
|
return (((Vector)mVecVec.elementAt(row)).elementAt(column));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create a status bar
|
|
* @return
|
|
* @see
|
|
*/
|
|
// protected Component createStatusbar() {
|
|
// // need to do something reasonable here
|
|
// StatusBar status = new StatusBar();
|
|
// return status;
|
|
// }
|
|
|
|
//***************************
|
|
/**
|
|
*
|
|
*/
|
|
class StatusBar extends JPanel {
|
|
public StatusBar() {
|
|
super();
|
|
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
|
|
}
|
|
|
|
public void paint(Graphics g) {
|
|
super.paint(g);
|
|
}
|
|
}
|
|
|
|
//***************************
|
|
/**
|
|
*/
|
|
class AddressPanel extends JPanel {
|
|
|
|
public AddressPanel(DataSourceList aDataSourceList) {
|
|
//super(true);
|
|
|
|
setBorder (new EmptyBorder(10,10,10,10));
|
|
setLayout (new BorderLayout(10, 5));
|
|
|
|
add(createSearchPane(aDataSourceList), BorderLayout.NORTH);
|
|
add(createTable(), BorderLayout.CENTER);
|
|
}
|
|
|
|
private Box createSearchPane (DataSourceList aDataSourceList) {
|
|
//explaination
|
|
JLabel explaination = new JLabel ("Type in the name you're looking for:");
|
|
explaination.setAlignmentX((float)0.0); //align left
|
|
|
|
//text field
|
|
mSearchField = new JTextField (20);
|
|
mSearchField.setAlignmentX((float)0.0); //align left
|
|
|
|
//box for explain and text field
|
|
Box innerBoxPane = new Box (BoxLayout.Y_AXIS);
|
|
// innerBoxPane.setAlignmentY((float)0.0); //align to bottom
|
|
innerBoxPane.add (explaination);
|
|
innerBoxPane.add (mSearchField);
|
|
|
|
//drop down combo box
|
|
mSearchSource = new JComboBox();
|
|
mSearchSource.setAlignmentY((float)0.0); //align to bottom
|
|
for (Enumeration e = aDataSourceList.getEnumeration() ; e.hasMoreElements() ;) {
|
|
DataSource ds = (DataSource) e.nextElement();
|
|
mSearchSource.addItem(ds.getReadableName());
|
|
}
|
|
|
|
//label
|
|
JLabel lbl = new JLabel ("in:");
|
|
lbl.setAlignmentY((float)0.0); //align to bottom
|
|
|
|
//search button
|
|
mSearchButton = new JButton ("Search");
|
|
mSearchButton.addActionListener(new Search());
|
|
mSearchButton.setAlignmentY((float)0.0); //align to bottom
|
|
|
|
Dimension spacer = new Dimension (10, 10);
|
|
|
|
//assemble all the pieces together.
|
|
Box boxPane = new Box (BoxLayout.X_AXIS);
|
|
|
|
boxPane.add (innerBoxPane); //explaination and text field
|
|
boxPane.add (Box.createRigidArea(spacer)); //spacer
|
|
boxPane.add (lbl); //"in:" label
|
|
boxPane.add (Box.createRigidArea(spacer)); //spacer
|
|
boxPane.add (mSearchSource); //drop down combo box
|
|
boxPane.add (Box.createRigidArea(spacer)); //spacer
|
|
boxPane.add (mSearchButton); //search buttton
|
|
|
|
return boxPane;
|
|
}
|
|
|
|
private JScrollPane createTable () {
|
|
String[] columnNames = {
|
|
"Name",
|
|
"Email Address",
|
|
"Organization",
|
|
"Phone",
|
|
"City",
|
|
"Nickname"};
|
|
|
|
//create the data model.
|
|
DataModel dm = new DataModel (columnNames);
|
|
|
|
//create the table.
|
|
mTable = new JTable(dm);
|
|
|
|
// mTable.setAutoCreateColumnsFromModel(false);
|
|
|
|
// Add our columns into the column model
|
|
// for (int columnIndex = 0; columnIndex < columnNames.length; columnIndex++){
|
|
// Create a column object for each column of data
|
|
// TableColumn newColumn = new TableColumn(columnNames[columnIndex]);
|
|
|
|
// Set a tool tip for the column header cell
|
|
// TableCellRenderer renderer2 = newColumn.getHeaderRenderer();
|
|
// if (renderer2 instanceof DefaultCellRenderer)
|
|
// ((DefaultCellRenderer)renderer2).setToolTipText(columnNames[columnIndex]);
|
|
|
|
// newColumn.setWidth(200);
|
|
// mTable.addColumn(newColumn);
|
|
// }
|
|
|
|
//no selection, no grid.
|
|
mTable.setColumnSelectionAllowed(false);
|
|
mTable.setShowGrid(false);
|
|
|
|
// Put the table and header into a scrollPane
|
|
JScrollPane scrollpane = JTable.createScrollPaneForTable(mTable);
|
|
// JTableHeader tableHeader = mTable.getTableHeader();
|
|
|
|
// create and add the column heading to the scrollpane's
|
|
// column header viewport
|
|
// JViewport headerViewport = new JViewport();
|
|
// headerViewport.setLayout(new BoxLayout(headerViewport, BoxLayout.X_AXIS));
|
|
// headerViewport.add(tableHeader);
|
|
// scrollpane.setColumnHeader(headerViewport);
|
|
|
|
// add the table to the viewport
|
|
/// JViewport mainViewPort = scrollpane.getViewport();
|
|
// mainViewPort.add(mTable);
|
|
// mainViewPort.setBackground (Color.white);
|
|
|
|
// speed up resizing repaints by turning off live cell updates
|
|
// tableHeader.setUpdateTableInRealTime(false);
|
|
|
|
//return the JScrollPane with the table in it.
|
|
return scrollpane;
|
|
}
|
|
}
|
|
}
|