www.pudn.com > htmlsaver.rar > LinkViewer.java


import javax.swing.*; 
import javax.swing.table.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
 
public class LinkViewer implements ActionListener 
{ 
  protected Vector links; 
   
  protected JDialog dialog; 
  protected JButton delete; 
  protected JButton finish; 
  protected JButton add; 
   
  protected JTable table; 
  protected LinkModel model; 
   
  public LinkViewer(JFrame owner, Vector links) 
  { 
    this.links = links; 
    dialog = new JDialog(owner, "Link Viewer", true); 
    initDialog(); 
  } 
   
  public LinkViewer(JDialog owner, Vector links) 
  { 
    this.links = links; 
    dialog = new JDialog(owner, "Link Viewer", true); 
    initDialog(); 
  } 
   
  protected void initDialog() 
  { 
    dialog.getContentPane().setLayout(new BorderLayout()); 
     
    JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
     
    delete = new JButton("Delete"); 
    delete.addActionListener(this); 
    panel.add(delete); 
    add = new JButton("Add"); 
    add.addActionListener(this); 
    panel.add(add); 
    finish = new JButton("Finish"); 
    finish.addActionListener(this); 
    panel.add(finish); 
     
    dialog.getContentPane().add(panel, BorderLayout.SOUTH); 
     
    model = new LinkModel(); 
    table = new JTable(model); 
    TableColumn column; 
    column = table.getColumnModel().getColumn(0); 
    column.setPreferredWidth(300); 
    column = table.getColumnModel().getColumn(1); 
    column.setPreferredWidth(150); 
     
    dialog.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER); 
     
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    dialog.setSize(500, 500); 
    dialog.show(); 
  } 
   
  public void actionPerformed(ActionEvent e) 
  { 
    if (e.getSource() == delete) 
    { 
      if (table.getSelectedRowCount() == 0) 
        return; 
       
      int[] rows = table.getSelectedRows(); 
      for (int i = rows.length - 1; i >= 0; i--) 
        model.deleteLink(rows[i]); 
      model.refresh(); 
       
      int row = rows[0]; 
      if ((row > 0) && (row == links.size())) 
        row--; 
      if (row < links.size()) 
        table.setRowSelectionInterval(row, row); 
    } 
    else if (e.getSource() == add) 
    { 
      LinkInput input = new LinkInput(dialog); 
      Link newLink = input.link; 
      if (newLink == null) 
        return; 
       
      links.add(newLink); 
      model.refresh(); 
    } 
    else if (e.getSource() == finish) 
    { 
      dialog.hide(); 
    } 
  } 
   
  class LinkModel extends AbstractTableModel 
  { 
    String[] columnNames = {"Link URL", "Link Text"}; 
    public String getColumnName(int col) { 
      return columnNames[col].toString(); 
    } 
    public int getRowCount() { return links.size(); } 
    public int getColumnCount() { return 2; } 
    public Object getValueAt(int row, int col) { 
      if (col == 0) 
        return ((Link)links.elementAt(row)).url; 
      else 
        return ((Link)links.elementAt(row)).text; 
    } 
    public void deleteLink(int row) 
    { 
      if ((row < 0) || (row >= links.size())) 
        return; 
      links.remove(row); 
    } 
    public void refresh() 
    { 
      this.fireTableDataChanged(); 
    } 
  } 
   
  public static void main(String[] args) 
  { 
    new LinkViewer(new JFrame(), 
      GetURL.getURL(new SystemIn().readLine(), new Project())); 
  } 
}