Java tutorial
/* * TV-Browser * Copyright (C) 04-2003 Martin Oberhauser (martin@tvbrowser.org) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * CVS information: * $RCSfile$ * $Source$ * $Date: 2010-06-28 19:33:48 +0200 (Mon, 28 Jun 2010) $ * $Author: bananeweizen $ * $Revision: 6662 $ */ package util.ui.customizableitems; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListCellRenderer; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import tvbrowser.ui.settings.channel.ChannelJList; import util.ui.DragAndDropMouseListener; import util.ui.ListDragAndDropHandler; import util.ui.ListDropAction; import util.ui.TVBrowserIcons; import util.ui.TabLayout; import util.ui.UiUtilities; import com.jgoodies.forms.layout.Sizes; /** * A sortable List */ public class SortableItemList extends JPanel implements ActionListener, ListDropAction { protected JButton mUpBt; protected JButton mDownBt; protected JButton mTopBtn; protected JButton mBottomBtn; protected JList mList; protected JLabel mTitleLb; protected DefaultListModel mListModel; protected JPanel mBtnPanel; public static final util.ui.Localizer mLocalizer = util.ui.Localizer .getLocalizerFor(CustomizableItemsPanel.class); public SortableItemList() { this(""); } public SortableItemList(String title) { this(title, new Object[] {}); } public SortableItemList(String title, Object[] objects) { this(title, objects, new JList()); } /** * Create a new SortableItemList * * @param list List to use * @since 2.2 */ public SortableItemList(ChannelJList list) { this("", new Object[] {}, list); } /** * Create a new SortableItemList * @param title Title of the List * @param objects List-Items * @param list List to use * * @since 2.2 */ public SortableItemList(String title, Object[] objects, JList list) { mUpBt = new JButton(TVBrowserIcons.up(TVBrowserIcons.SIZE_LARGE)); String msg = mLocalizer.msg("tooltip.up", "Move selected rows up"); mUpBt.setToolTipText(msg); mUpBt.addActionListener(this); mDownBt = new JButton(TVBrowserIcons.down(TVBrowserIcons.SIZE_LARGE)); msg = mLocalizer.msg("tooltip.down", "Move selected rows down"); mDownBt.setToolTipText(msg); mDownBt.addActionListener(this); mTopBtn = new JButton(TVBrowserIcons.top(TVBrowserIcons.SIZE_LARGE)); msg = mLocalizer.msg("tooltip.top", "Move selected rows to top"); mTopBtn.setToolTipText(msg); mTopBtn.addActionListener(this); mBottomBtn = new JButton(TVBrowserIcons.bottom(TVBrowserIcons.SIZE_LARGE)); msg = mLocalizer.msg("tooltip.bottom", "Move selected rows to bottom"); mBottomBtn.setToolTipText(msg); mBottomBtn.addActionListener(this); mList = list; mListModel = new DefaultListModel(); mList.setModel(mListModel); for (Object object : objects) { mListModel.addElement(object); } mList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { updateBtns(); } }); //Register DnD on the List. ListDragAndDropHandler dnDHandler = new ListDragAndDropHandler(mList, mList, this); new DragAndDropMouseListener(mList, mList, this, dnDHandler); mTitleLb = new JLabel(title); mBtnPanel = new JPanel(); mBtnPanel.setBorder(BorderFactory.createEmptyBorder(0, Sizes.dialogUnitXAsPixel(3, mBtnPanel), 0, 0)); mBtnPanel.setLayout(new TabLayout(1)); mBtnPanel.add(mTopBtn); mBtnPanel.add(mUpBt); mBtnPanel.add(mDownBt); mBtnPanel.add(mBottomBtn); setLayout(new BorderLayout()); add(mTitleLb, BorderLayout.NORTH); add(new JScrollPane(mList), BorderLayout.CENTER); JPanel p1 = new JPanel(new BorderLayout()); p1.add(mBtnPanel, BorderLayout.NORTH); add(p1, BorderLayout.EAST); updateBtns(); } public void addButton(Component comp) { mBtnPanel.add(comp); } private void updateBtns() { mUpBt.setEnabled(mList.getSelectedIndex() > 0); mDownBt.setEnabled(mList.getSelectedIndex() < mListModel.size() - 1); mTopBtn.setEnabled(mUpBt.isEnabled()); mBottomBtn.setEnabled(mDownBt.isEnabled()); } public void setTitle(String title) { mTitleLb.setText(title); } public void setCellRenderer(ListCellRenderer renderer) { mList.setCellRenderer(renderer); } public JList getList() { return mList; } public void addElement(Object o) { mListModel.addElement(o); } public void addElement(int inx, Object o) { mListModel.add(inx, o); } public void removeElementAt(int inx) { mListModel.removeElementAt(inx); } public void removeElement(Object o) { mListModel.removeElement(o); } public void removeAllElements() { mListModel.removeAllElements(); } public boolean contains(Object o) { return mListModel.contains(o); } public Object[] getItems() { return mListModel.toArray(); } public void actionPerformed(ActionEvent event) { Object o = event.getSource(); if (o == mUpBt) { UiUtilities.moveSelectedItems(mList, -1); if (mUpBt.isEnabled()) { mUpBt.requestFocusInWindow(); } } else if (o == mDownBt) { UiUtilities.moveSelectedItems(mList, 1); if (mDownBt.isEnabled()) { mDownBt.requestFocusInWindow(); } } else if (o == mTopBtn) { UiUtilities.moveSelectedItems(mList, -10000); if (mTopBtn.isEnabled()) { mTopBtn.requestFocusInWindow(); } } else if (o == mBottomBtn) { UiUtilities.moveSelectedItems(mList, +10000); if (mBottomBtn.isEnabled()) { mBottomBtn.requestFocusInWindow(); } } } /** * Returns the Up-Button * @return Up-Button */ public JButton getUpButton() { return mUpBt; } /** * Returns the Down-Button * @return Down-Button */ public JButton getDownButton() { return mDownBt; } /** * Returns the Top-Button * @return Top-Button */ public JButton getTopButton() { return mTopBtn; } /** * Returns the Bottom-Button * @return Bottom-Button */ public JButton getBottomButton() { return mBottomBtn; } public void drop(JList source, JList target, int rows, boolean move) { UiUtilities.moveSelectedItems(target, rows, true); } }