From a0a43b0e031189ef0390a8d6eadcc694f2c72b35 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Sat, 11 Oct 2008 20:42:03 +0000 Subject: [PATCH] * removed Settings singleton, always use Preferences directly * simplified HistoryPanel by using MigLayout * added MigLayout jar to libs * improved decimal format for file count and size in AnalyzePanel * put application name and version getters into FileBotUtil --- lib/miglayout-3.6-swing.jar | Bin 0 -> 74512 bytes source/Main.java | 14 +++- .../net/sourceforge/filebot/FileBotUtil.java | 9 +++ source/net/sourceforge/filebot/Settings.java | 72 ------------------ .../filebot/ui/AbstractSearchPanel.java | 2 +- .../filebot/ui/FileBotPanelSelectionList.java | 7 +- .../sourceforge/filebot/ui/FileBotWindow.java | 17 +++-- .../sourceforge/filebot/ui/HistoryPanel.java | 69 ++++++----------- .../filebot/ui/MessageManager.java | 4 +- .../ui/panel/analyze/tools/ToolPanel.java | 14 ++-- .../filebot/ui/panel/search/SearchPanel.java | 8 +- .../ui/panel/subtitle/SubtitlePanel.java | 17 +++-- .../ui/transfer/TextFileTransferable.java | 3 +- .../web/OpenSubtitlesSubtitleClient.java | 4 +- source/net/sourceforge/tuned/FileUtil.java | 6 +- .../ui/AbstractFancyListCellRenderer.java | 4 +- .../ui/DefaultFancyListCellRenderer.java | 9 +-- 17 files changed, 97 insertions(+), 162 deletions(-) create mode 100644 lib/miglayout-3.6-swing.jar delete mode 100644 source/net/sourceforge/filebot/Settings.java diff --git a/lib/miglayout-3.6-swing.jar b/lib/miglayout-3.6-swing.jar new file mode 100644 index 0000000000000000000000000000000000000000..5a96289d632373a927a7ca7a498324b2cc426a3a GIT binary patch literal 74512 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 L-IKtT2hRThCZe?f literal 0 HcmV?d00001 diff --git a/source/Main.java b/source/Main.java index 0ac43175..688adcb3 100644 --- a/source/Main.java +++ b/source/Main.java @@ -1,11 +1,13 @@ import java.util.logging.Level; import java.util.logging.Logger; +import java.util.prefs.BackingStoreException; +import java.util.prefs.Preferences; import javax.swing.SwingUtilities; import javax.swing.UIManager; import net.sourceforge.filebot.ArgumentBean; -import net.sourceforge.filebot.Settings; +import net.sourceforge.filebot.FileBotUtil; import net.sourceforge.filebot.ui.FileBotWindow; import org.kohsuke.args4j.CmdLineException; @@ -21,8 +23,13 @@ public class Main { final ArgumentBean argumentBean = parseArguments(args); - if (argumentBean.isClear()) - Settings.getSettings().clear(); + if (argumentBean.isClear()) { + try { + Preferences.userNodeForPackage(FileBotUtil.class).removeNode(); + } catch (BackingStoreException e) { + Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.toString(), e); + } + } try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); @@ -67,4 +74,5 @@ public class Main { return argumentBean; } + } diff --git a/source/net/sourceforge/filebot/FileBotUtil.java b/source/net/sourceforge/filebot/FileBotUtil.java index a8e3aa92..9209cc2d 100644 --- a/source/net/sourceforge/filebot/FileBotUtil.java +++ b/source/net/sourceforge/filebot/FileBotUtil.java @@ -13,6 +13,15 @@ import net.sourceforge.tuned.FileUtil; public final class FileBotUtil { + public static final String getApplicationName() { + return "FileBot"; + }; + + + public static final String getApplicationVersion() { + return "1.9"; + }; + /** * Invalid characters in filenames: \, /, :, *, ?, ", <, >, |, \r and \n */ diff --git a/source/net/sourceforge/filebot/Settings.java b/source/net/sourceforge/filebot/Settings.java deleted file mode 100644 index 3447fb00..00000000 --- a/source/net/sourceforge/filebot/Settings.java +++ /dev/null @@ -1,72 +0,0 @@ - -package net.sourceforge.filebot; - - -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.prefs.BackingStoreException; -import java.util.prefs.Preferences; - -import net.sourceforge.tuned.PreferencesList; -import net.sourceforge.tuned.PreferencesMap; - - -public class Settings { - - public static final String NAME = "FileBot"; - public static final String VERSION = "2.0"; - - public static final String ROOT = NAME.toLowerCase(); - - public static final String SELECTED_PANEL = "panel"; - public static final String SEARCH_HISTORY = "search/history"; - public static final String SUBTITLE_HISTORY = "subtitle/history"; - - private static final Settings settings = new Settings(); - - - public static Settings getSettings() { - return settings; - } - - private final Preferences prefs; - - - private Settings() { - prefs = Preferences.userRoot().node(ROOT); - } - - - public void putInt(String key, int value) { - prefs.putInt(key, value); - } - - - public int getInt(String key, int def) { - return prefs.getInt(key, def); - } - - - public List asStringList(String key) { - return PreferencesList.map(prefs.node(key), String.class); - } - - - public Map asBooleanMap(String key) { - return PreferencesMap.map(prefs.node(key), Boolean.class); - } - - - public void clear() { - try { - for (String child : prefs.childrenNames()) { - prefs.node(child).removeNode(); - } - } catch (BackingStoreException e) { - Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.toString(), e); - } - } - -} diff --git a/source/net/sourceforge/filebot/ui/AbstractSearchPanel.java b/source/net/sourceforge/filebot/ui/AbstractSearchPanel.java index f4fdf38b..fd56f60d 100644 --- a/source/net/sourceforge/filebot/ui/AbstractSearchPanel.java +++ b/source/net/sourceforge/filebot/ui/AbstractSearchPanel.java @@ -72,7 +72,7 @@ public abstract class AbstractSearchPanel extends Fi centerPanel.add(tabbedPane, BorderLayout.CENTER); - historyPanel.setColumnHeader3("Duration"); + historyPanel.setColumnHeader(2, "Duration"); JScrollPane historyScrollPane = new JScrollPane(historyPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); historyScrollPane.setBorder(BorderFactory.createEmptyBorder()); diff --git a/source/net/sourceforge/filebot/ui/FileBotPanelSelectionList.java b/source/net/sourceforge/filebot/ui/FileBotPanelSelectionList.java index 787fac0e..b99f6a74 100644 --- a/source/net/sourceforge/filebot/ui/FileBotPanelSelectionList.java +++ b/source/net/sourceforge/filebot/ui/FileBotPanelSelectionList.java @@ -2,8 +2,8 @@ package net.sourceforge.filebot.ui; -import java.awt.BorderLayout; import java.awt.Color; +import java.awt.FlowLayout; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetAdapter; import java.awt.dnd.DropTargetDragEvent; @@ -53,7 +53,10 @@ class FileBotPanelSelectionList extends JList { private static class PanelCellRenderer extends DefaultFancyListCellRenderer { public PanelCellRenderer() { - super(BorderLayout.CENTER, 10, 0, new Color(0x163264)); + super(10, 0, new Color(0x163264)); + + // center labels in list + setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); setHighlightingEnabled(false); diff --git a/source/net/sourceforge/filebot/ui/FileBotWindow.java b/source/net/sourceforge/filebot/ui/FileBotWindow.java index 6b825772..fa42c3cf 100644 --- a/source/net/sourceforge/filebot/ui/FileBotWindow.java +++ b/source/net/sourceforge/filebot/ui/FileBotWindow.java @@ -7,6 +7,7 @@ import java.awt.CardLayout; import java.awt.Image; import java.util.ArrayList; import java.util.List; +import java.util.prefs.Preferences; import javax.swing.JComponent; import javax.swing.JFrame; @@ -18,8 +19,8 @@ import javax.swing.border.EmptyBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import net.sourceforge.filebot.FileBotUtil; import net.sourceforge.filebot.ResourceManager; -import net.sourceforge.filebot.Settings; import net.sourceforge.filebot.ui.panel.analyze.AnalyzePanel; import net.sourceforge.filebot.ui.panel.list.ListPanel; import net.sourceforge.filebot.ui.panel.rename.RenamePanel; @@ -41,7 +42,7 @@ public class FileBotWindow extends JFrame implements ListSelectionListener { public FileBotWindow() { - super(Settings.NAME); + super(FileBotUtil.getApplicationName()); setLocationByPlatform(true); setDefaultCloseOperation(EXIT_ON_CLOSE); @@ -59,7 +60,10 @@ public class FileBotWindow extends JFrame implements ListSelectionListener { setSize(760, 615); - selectionListPanel.setSelectedIndex(Settings.getSettings().getInt(Settings.SELECTED_PANEL, 3)); + // restore the panel selection from last time, + // switch to SearchPanel by default (e.g. first start) + int selectedPanel = Preferences.userNodeForPackage(getClass()).getInt("selectedPanel", 3); + selectionListPanel.setSelectedIndex(selectedPanel); MessageBus.getDefault().addMessageHandler("panel", panelSelectMessageHandler); } @@ -91,7 +95,7 @@ public class FileBotWindow extends JFrame implements ListSelectionListener { c.revalidate(); c.repaint(); - Settings.getSettings().putInt(Settings.SELECTED_PANEL, selectionListPanel.getSelectedIndex()); + Preferences.userNodeForPackage(getClass()).putInt("selectedPanel", selectionListPanel.getSelectedIndex()); } @@ -121,7 +125,6 @@ public class FileBotWindow extends JFrame implements ListSelectionListener { private JComponent createPageLayer() { JPanel pageLayer = new JPanel(new BorderLayout()); - pagePanel.setBorder(new EmptyBorder(10, 110, 10, 10)); pageLayer.add(headerPanel, BorderLayout.NORTH); @@ -139,7 +142,7 @@ public class FileBotWindow extends JFrame implements ListSelectionListener { private JComponent createContentPane() { - JPanel contentPane = new JPanel(); + JPanel contentPane = new JPanel(null); contentPane.setLayout(new OverlayLayout(contentPane)); contentPane.add(createSelectionListLayer()); @@ -153,8 +156,10 @@ public class FileBotWindow extends JFrame implements ListSelectionListener { @Override public void handle(String topic, Object... messages) { if (messages.length >= 1) { + // get last element in array Object panel = messages[messages.length - 1]; + // switch to this panel if (panel instanceof FileBotPanel) selectionListPanel.setSelectedValue(panel, true); } diff --git a/source/net/sourceforge/filebot/ui/HistoryPanel.java b/source/net/sourceforge/filebot/ui/HistoryPanel.java index cd4954c0..fd7c47f4 100644 --- a/source/net/sourceforge/filebot/ui/HistoryPanel.java +++ b/source/net/sourceforge/filebot/ui/HistoryPanel.java @@ -3,85 +3,66 @@ package net.sourceforge.filebot.ui; import java.awt.Color; -import java.awt.FlowLayout; import java.awt.Font; -import java.awt.GridLayout; import java.net.URI; +import java.util.ArrayList; +import java.util.List; import javax.swing.Icon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; -import javax.swing.border.EmptyBorder; +import net.miginfocom.swing.MigLayout; import net.sourceforge.tuned.ui.HyperlinkLabel; public class HistoryPanel extends JPanel { - private final JPanel grid = new JPanel(new GridLayout(0, 3, 15, 10)); - - private final JLabel columnHeader1 = new JLabel(); - private final JLabel columnHeader2 = new JLabel(); - private final JLabel columnHeader3 = new JLabel(); + private final List columnHeaders = new ArrayList(3); public HistoryPanel() { - super(new FlowLayout(FlowLayout.CENTER)); + super(new MigLayout("fillx, insets 10 30 10 50, wrap 3")); setBackground(Color.WHITE); setOpaque(true); - grid.setOpaque(false); - Font font = columnHeader1.getFont().deriveFont(Font.BOLD); - - columnHeader1.setHorizontalAlignment(SwingConstants.CENTER); - columnHeader2.setHorizontalAlignment(SwingConstants.CENTER); - columnHeader3.setHorizontalAlignment(SwingConstants.RIGHT); - - columnHeader1.setFont(font); - columnHeader2.setFont(font); - columnHeader3.setFont(font); - - grid.add(columnHeader1); - grid.add(columnHeader2); - grid.add(columnHeader3); - - add(grid); + setupHeader(); } - public void setColumnHeader1(String text) { - columnHeader1.setText(text); + protected void setupHeader() { + for (int i = 0; i < 3; i++) { + JLabel columnHeader = new JLabel(); + + columnHeader.setFont(columnHeader.getFont().deriveFont(Font.BOLD)); + + columnHeaders.add(columnHeader); + add(columnHeader, (i == 0) ? "align left, gapbefore 20" : "align right, gapafter 20"); + } } - public void setColumnHeader2(String text) { - columnHeader2.setText(text); - } - - - public void setColumnHeader3(String text) { - columnHeader3.setText(text); + public void setColumnHeader(int index, String text) { + columnHeaders.get(index).setText(text); } public void add(String column1, URI link, Icon icon, String column2, String column3) { JLabel label1 = (link != null) ? new HyperlinkLabel(column1, link) : new JLabel(column1); - JLabel label2 = new JLabel(column2); - JLabel label3 = new JLabel(column3); - - label1.setHorizontalAlignment(SwingConstants.LEFT); - label2.setHorizontalAlignment(SwingConstants.RIGHT); - label3.setHorizontalAlignment(SwingConstants.RIGHT); + JLabel label2 = new JLabel(column2, SwingConstants.RIGHT); + JLabel label3 = new JLabel(column3, SwingConstants.RIGHT); label1.setIcon(icon); label1.setIconTextGap(7); - label2.setBorder(new EmptyBorder(0, 0, 0, 10)); + add(label1, "align left"); - grid.add(label1); - grid.add(label2); - grid.add(label3); + // set minimum with to 100px so the text is aligned to the right, + // even though the whole label is centered + add(label2, "align center, wmin 100"); + + add(label3, "align right"); } } diff --git a/source/net/sourceforge/filebot/ui/MessageManager.java b/source/net/sourceforge/filebot/ui/MessageManager.java index 34f2138b..8a85ff10 100644 --- a/source/net/sourceforge/filebot/ui/MessageManager.java +++ b/source/net/sourceforge/filebot/ui/MessageManager.java @@ -5,8 +5,8 @@ package net.sourceforge.filebot.ui; import javax.swing.Icon; import javax.swing.SwingConstants; +import net.sourceforge.filebot.FileBotUtil; import net.sourceforge.filebot.ResourceManager; -import net.sourceforge.filebot.Settings; import net.sourceforge.tuned.ui.notification.MessageNotification; import net.sourceforge.tuned.ui.notification.NotificationManager; import net.sourceforge.tuned.ui.notification.QueueNotificationLayout; @@ -29,7 +29,7 @@ public class MessageManager { private static void show(String message, Icon icon, int timeout) { - manager.show(new MessageNotification(Settings.NAME, message, icon, timeout)); + manager.show(new MessageNotification(FileBotUtil.getApplicationName(), message, icon, timeout)); } } diff --git a/source/net/sourceforge/filebot/ui/panel/analyze/tools/ToolPanel.java b/source/net/sourceforge/filebot/ui/panel/analyze/tools/ToolPanel.java index 4af3077b..232bbbaa 100644 --- a/source/net/sourceforge/filebot/ui/panel/analyze/tools/ToolPanel.java +++ b/source/net/sourceforge/filebot/ui/panel/analyze/tools/ToolPanel.java @@ -29,7 +29,7 @@ public abstract class ToolPanel extends JComponent { public abstract void update(Collection list); - protected static DefaultMutableTreeNode createTreeNode(String name, Collection files) { + protected DefaultMutableTreeNode createTreeNode(String name, Collection files) { DefaultMutableTreeNode node = new DefaultMutableTreeNode(); long totalSize = 0; @@ -39,15 +39,11 @@ public abstract class ToolPanel extends JComponent { totalSize += file.length(); } - String count = null; + // format the number of files string (e.g. 1 file, 2 files, ...) + String numberOfFiles = String.format("%,d %s", files.size(), files.size() == 1 ? "file" : "files"); - if (files.size() == 1) { - count = String.format("%d file", files.size()); - } else { - count = String.format("%d files", files.size()); - } - - node.setUserObject(String.format("%s (%s, %s)", name, count, FileUtil.formatSize(totalSize))); + // set node text (e.g. txt (1 file, 42 Byte)) + node.setUserObject(String.format("%s (%s, %s)", name, numberOfFiles, FileUtil.formatSize(totalSize))); return node; } diff --git a/source/net/sourceforge/filebot/ui/panel/search/SearchPanel.java b/source/net/sourceforge/filebot/ui/panel/search/SearchPanel.java index 972c331f..758d9273 100644 --- a/source/net/sourceforge/filebot/ui/panel/search/SearchPanel.java +++ b/source/net/sourceforge/filebot/ui/panel/search/SearchPanel.java @@ -67,7 +67,7 @@ public class SearchPanel extends FileBotPanel { public SearchPanel() { - super("Search", ResourceManager.getIcon("panel.search")); + super("Episodes", ResourceManager.getIcon("panel.search")); searchField = new SelectButtonTextField(); @@ -76,9 +76,9 @@ public class SearchPanel extends FileBotPanel { searchField.getSelectButton().addPropertyChangeListener(SelectButton.SELECTED_VALUE, selectButtonListener); - historyPanel.setColumnHeader1("Show"); - historyPanel.setColumnHeader2("Number of Episodes"); - historyPanel.setColumnHeader3("Duration"); + historyPanel.setColumnHeader(0, "Show"); + historyPanel.setColumnHeader(1, "Number of Episodes"); + historyPanel.setColumnHeader(2, "Duration"); JPanel mainPanel = new JPanel(new BorderLayout(5, 5)); diff --git a/source/net/sourceforge/filebot/ui/panel/subtitle/SubtitlePanel.java b/source/net/sourceforge/filebot/ui/panel/subtitle/SubtitlePanel.java index 46ab97b5..6ab319c7 100644 --- a/source/net/sourceforge/filebot/ui/panel/subtitle/SubtitlePanel.java +++ b/source/net/sourceforge/filebot/ui/panel/subtitle/SubtitlePanel.java @@ -7,9 +7,9 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Locale; +import java.util.prefs.Preferences; import net.sourceforge.filebot.ResourceManager; -import net.sourceforge.filebot.Settings; import net.sourceforge.filebot.ui.AbstractSearchPanel; import net.sourceforge.filebot.ui.SelectDialog; import net.sourceforge.filebot.web.OpenSubtitlesSubtitleClient; @@ -18,6 +18,7 @@ import net.sourceforge.filebot.web.SubsceneSubtitleClient; import net.sourceforge.filebot.web.SubtitleClient; import net.sourceforge.filebot.web.SubtitleDescriptor; import net.sourceforge.tuned.ListChangeSynchronizer; +import net.sourceforge.tuned.PreferencesList; import net.sourceforge.tuned.ui.LabelProvider; import net.sourceforge.tuned.ui.SimpleLabelProvider; @@ -25,15 +26,21 @@ import net.sourceforge.tuned.ui.SimpleLabelProvider; public class SubtitlePanel extends AbstractSearchPanel { public SubtitlePanel() { - super("Subtitle", ResourceManager.getIcon("panel.subtitle")); + super("Subtitles", ResourceManager.getIcon("panel.subtitle")); - getHistoryPanel().setColumnHeader1("Show / Movie"); - getHistoryPanel().setColumnHeader2("Number of Subtitles"); + getHistoryPanel().setColumnHeader(0, "Show / Movie"); + getHistoryPanel().setColumnHeader(1, "Number of Subtitles"); - List persistentSearchHistory = Settings.getSettings().asStringList(Settings.SUBTITLE_HISTORY); + // get preferences node that contains the history entries + Preferences historyNode = Preferences.systemNodeForPackage(getClass()).node("history"); + // get a StringList that read and writes directly from and to the preferences + List persistentSearchHistory = PreferencesList.map(historyNode, String.class); + + // add history from the preferences to the current in-memory history (for completion) getSearchHistory().addAll(persistentSearchHistory); + // perform all insert/add/remove operations on the in-memory history on the preferences node as well ListChangeSynchronizer.syncEventListToList(getSearchHistory(), persistentSearchHistory); } diff --git a/source/net/sourceforge/filebot/ui/transfer/TextFileTransferable.java b/source/net/sourceforge/filebot/ui/transfer/TextFileTransferable.java index 3092baa2..86d6b41a 100644 --- a/source/net/sourceforge/filebot/ui/transfer/TextFileTransferable.java +++ b/source/net/sourceforge/filebot/ui/transfer/TextFileTransferable.java @@ -12,7 +12,6 @@ import java.nio.channels.FileChannel; import java.nio.charset.Charset; import net.sourceforge.filebot.FileBotUtil; -import net.sourceforge.filebot.Settings; import net.sourceforge.tuned.TemporaryFolder; @@ -56,7 +55,7 @@ public class TextFileTransferable implements Transferable { String filename = FileBotUtil.validateFileName(defaultFileName); // create new temporary file - File temporaryFile = TemporaryFolder.getFolder(Settings.ROOT).createFile(filename); + File temporaryFile = TemporaryFolder.getFolder(FileBotUtil.getApplicationName().toLowerCase()).createFile(filename); // write text to file FileChannel fileChannel = new FileOutputStream(temporaryFile).getChannel(); diff --git a/source/net/sourceforge/filebot/web/OpenSubtitlesSubtitleClient.java b/source/net/sourceforge/filebot/web/OpenSubtitlesSubtitleClient.java index af2791dd..304ee5b2 100644 --- a/source/net/sourceforge/filebot/web/OpenSubtitlesSubtitleClient.java +++ b/source/net/sourceforge/filebot/web/OpenSubtitlesSubtitleClient.java @@ -13,8 +13,8 @@ import java.util.logging.Logger; import javax.swing.Icon; +import net.sourceforge.filebot.FileBotUtil; import net.sourceforge.filebot.ResourceManager; -import net.sourceforge.filebot.Settings; /** @@ -22,7 +22,7 @@ import net.sourceforge.filebot.Settings; */ public class OpenSubtitlesSubtitleClient implements SubtitleClient { - private final OpenSubtitlesClient client = new OpenSubtitlesClient(String.format("%s v%s", Settings.NAME, Settings.VERSION)); + private final OpenSubtitlesClient client = new OpenSubtitlesClient(String.format("%s v%s", FileBotUtil.getApplicationName(), FileBotUtil.getApplicationVersion())); private final LogoutTimer logoutTimer = new LogoutTimer(); diff --git a/source/net/sourceforge/tuned/FileUtil.java b/source/net/sourceforge/tuned/FileUtil.java index d2a0e1fa..58092f4d 100644 --- a/source/net/sourceforge/tuned/FileUtil.java +++ b/source/net/sourceforge/tuned/FileUtil.java @@ -16,11 +16,11 @@ public final class FileUtil { public static String formatSize(long size) { if (size >= MEGA) - return String.format("%d MB", size / MEGA); + return String.format("%,d MB", size / MEGA); else if (size >= KILO) - return String.format("%d KB", size / KILO); + return String.format("%,d KB", size / KILO); else - return String.format("%d Byte", size); + return String.format("%,d Byte", size); } diff --git a/source/net/sourceforge/tuned/ui/AbstractFancyListCellRenderer.java b/source/net/sourceforge/tuned/ui/AbstractFancyListCellRenderer.java index ec054166..dda9cb7c 100644 --- a/source/net/sourceforge/tuned/ui/AbstractFancyListCellRenderer.java +++ b/source/net/sourceforge/tuned/ui/AbstractFancyListCellRenderer.java @@ -2,9 +2,9 @@ package net.sourceforge.tuned.ui; -import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; +import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; @@ -55,7 +55,7 @@ public abstract class AbstractFancyListCellRenderer extends JComponent implement public AbstractFancyListCellRenderer(Insets padding, Insets margin, Color borderColor) { - this.setLayout(new BorderLayout()); + this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); Border border = null; diff --git a/source/net/sourceforge/tuned/ui/DefaultFancyListCellRenderer.java b/source/net/sourceforge/tuned/ui/DefaultFancyListCellRenderer.java index de77f36e..b2c37a44 100644 --- a/source/net/sourceforge/tuned/ui/DefaultFancyListCellRenderer.java +++ b/source/net/sourceforge/tuned/ui/DefaultFancyListCellRenderer.java @@ -2,7 +2,6 @@ package net.sourceforge.tuned.ui; -import java.awt.BorderLayout; import java.awt.Color; import java.awt.Insets; @@ -17,19 +16,19 @@ public class DefaultFancyListCellRenderer extends AbstractFancyListCellRenderer public DefaultFancyListCellRenderer() { - add(label, BorderLayout.WEST); + add(label); } public DefaultFancyListCellRenderer(int padding) { super(new Insets(padding, padding, padding, padding)); - add(label, BorderLayout.WEST); + add(label); } - protected DefaultFancyListCellRenderer(Object constraint, int padding, int margin, Color selectedBorderColor) { + protected DefaultFancyListCellRenderer(int padding, int margin, Color selectedBorderColor) { super(new Insets(padding, padding, padding, padding), new Insets(margin, margin, margin, margin), selectedBorderColor); - add(label, constraint); + add(label); }