1
0
mirror of https://github.com/SKCraft/Launcher.git synced 2024-11-30 13:13:58 +01:00

Load UI assets in the background.

This commit is contained in:
sk89q 2015-11-14 12:09:46 -08:00
parent c1cbff754e
commit 2cd6ba59ff
12 changed files with 103 additions and 68 deletions

View File

@ -46,7 +46,7 @@ public class AboutDialog extends JDialog {
JPanel container = new JPanel(); JPanel container = new JPanel();
container.setLayout(new MigLayout("insets dialog")); container.setLayout(new MigLayout("insets dialog"));
container.add(new JLabel(SwingHelper.readImageIcon(Creator.class, "about_header.png")), "dock north"); container.add(new JLabel(SwingHelper.createIcon(Creator.class, "about_header.png")), "dock north");
container.add(new JLabel("<html>Version " + version), "wrap"); container.add(new JLabel("<html>Version " + version), "wrap");
container.add(new JLabel("<html>Licensed under GNU Lesser General Public License, version 3."), "wrap, gapbottom unrel"); container.add(new JLabel("<html>Licensed under GNU Lesser General Public License, version 3."), "wrap, gapbottom unrel");
container.add(new JLabel("<html>Created by the SKCraft team. Visit our website!"), "wrap, gapbottom unrel"); container.add(new JLabel("<html>Created by the SKCraft team. Visit our website!"), "wrap, gapbottom unrel");

View File

@ -27,7 +27,7 @@ public class GenerateListingDialog extends JDialog {
@Getter private final DirectoryField destDirField = new DirectoryField(); @Getter private final DirectoryField destDirField = new DirectoryField();
@Getter private final JComboBox<ListingType> listingTypeCombo = new JComboBox<>(new ListingTypeComboBoxModel()); @Getter private final JComboBox<ListingType> listingTypeCombo = new JComboBox<>(new ListingTypeComboBoxModel());
@Getter private final JTable manifestsTable = new DefaultTable(); @Getter private final JTable manifestsTable = new DefaultTable();
@Getter private final JLabel gameKeyWarning = new JLabel("Selected listing type won't support adding modpacks using 'game keys'.", SwingHelper.readImageIcon(Creator.class, "warning_icon.png"), SwingConstants.LEFT); @Getter private final JLabel gameKeyWarning = new JLabel("Selected listing type won't support adding modpacks using 'game keys'.", SwingHelper.createIcon(Creator.class, "warning_icon.png"), SwingConstants.LEFT);
@Getter private final JButton editManifestButton = new JButton("Modify..."); @Getter private final JButton editManifestButton = new JButton("Modify...");

View File

@ -21,13 +21,13 @@ import java.awt.event.KeyEvent;
public class PackManagerFrame extends JFrame { public class PackManagerFrame extends JFrame {
@Getter private final JButton newPackButton = new JButton("New Pack", SwingHelper.readImageIcon(Creator.class, "new.png")); @Getter private final JButton newPackButton = new JButton("New Pack", SwingHelper.createIcon(Creator.class, "new.png"));
@Getter private final JButton importButton = new JButton("Add Existing", SwingHelper.readImageIcon(Creator.class, "import.png")); @Getter private final JButton importButton = new JButton("Add Existing", SwingHelper.createIcon(Creator.class, "import.png"));
@Getter private final JButton editConfigButton = new JButton("Modify", SwingHelper.readImageIcon(Creator.class, "edit.png")); @Getter private final JButton editConfigButton = new JButton("Modify", SwingHelper.createIcon(Creator.class, "edit.png"));
@Getter private final JButton openFolderButton = new JButton("Open", SwingHelper.readImageIcon(Creator.class, "open_folder.png")); @Getter private final JButton openFolderButton = new JButton("Open", SwingHelper.createIcon(Creator.class, "open_folder.png"));
@Getter private final JButton checkProblemsButton = new JButton("Check", SwingHelper.readImageIcon(Creator.class, "check.png")); @Getter private final JButton checkProblemsButton = new JButton("Check", SwingHelper.createIcon(Creator.class, "check.png"));
@Getter private final JButton testButton = new JButton("Test", SwingHelper.readImageIcon(Creator.class, "test.png")); @Getter private final JButton testButton = new JButton("Test", SwingHelper.createIcon(Creator.class, "test.png"));
@Getter private final JButton buildButton = new JButton("Build", SwingHelper.readImageIcon(Creator.class, "build.png")); @Getter private final JButton buildButton = new JButton("Build", SwingHelper.createIcon(Creator.class, "build.png"));
@Getter private final JMenuItem newPackMenuItem = new JMenuItem("New Pack..."); @Getter private final JMenuItem newPackMenuItem = new JMenuItem("New Pack...");
@Getter private final JMenuItem newPackAtLocationMenuItem = new JMenuItem("New Pack at Location..."); @Getter private final JMenuItem newPackAtLocationMenuItem = new JMenuItem("New Pack at Location...");
@ -68,7 +68,7 @@ public class PackManagerFrame extends JFrame {
pack(); pack();
setLocationRelativeTo(null); setLocationRelativeTo(null);
SwingHelper.setIconImage(this, Creator.class, "icon.png"); SwingHelper.setFrameIcon(this, Creator.class, "icon.png");
} }
private void initComponents() { private void initComponents() {

View File

@ -19,8 +19,8 @@ import java.awt.event.KeyEvent;
public class WelcomeDialog extends JFrame { public class WelcomeDialog extends JFrame {
@Getter private final JButton newButton = new JButton("New Workspace...", SwingHelper.readImageIcon(Creator.class, "new.png")); @Getter private final JButton newButton = new JButton("New Workspace...", SwingHelper.createIcon(Creator.class, "new.png"));
@Getter private final JButton openButton = new JButton("Open Workspace...", SwingHelper.readImageIcon(Creator.class, "open_folder.png")); @Getter private final JButton openButton = new JButton("Open Workspace...", SwingHelper.createIcon(Creator.class, "open_folder.png"));
@Getter private final JButton helpButton = new JButton("Help"); @Getter private final JButton helpButton = new JButton("Help");
@Getter private final JButton aboutButton = new JButton("About"); @Getter private final JButton aboutButton = new JButton("About");
@Getter private final JButton quitButton = new JButton("Quit"); @Getter private final JButton quitButton = new JButton("Quit");
@ -35,7 +35,7 @@ public class WelcomeDialog extends JFrame {
pack(); pack();
setLocationRelativeTo(null); setLocationRelativeTo(null);
SwingHelper.setIconImage(this, Creator.class, "icon.png"); SwingHelper.setFrameIcon(this, Creator.class, "icon.png");
} }
private void initComponents() { private void initComponents() {
@ -44,7 +44,7 @@ public class WelcomeDialog extends JFrame {
JPanel container = new JPanel(); JPanel container = new JPanel();
container.setLayout(new MigLayout("insets 50 20")); container.setLayout(new MigLayout("insets 50 20"));
container.add(new JLabel(SwingHelper.readImageIcon(Creator.class, "welcome_logo.png")), "wrap, gap 20 20, gapbottom 30"); container.add(new JLabel(SwingHelper.createIcon(Creator.class, "welcome_logo.png")), "wrap, gap 20 20, gapbottom 30");
container.add(newButton, "grow, gap 50 50, wrap"); container.add(newButton, "grow, gap 50 50, wrap");
container.add(openButton, "grow, gap 50 50, wrap"); container.add(openButton, "grow, gap 50 50, wrap");

View File

@ -19,11 +19,11 @@ import static com.google.common.base.Preconditions.checkNotNull;
public class ModFileTableModel extends AbstractTableModel { public class ModFileTableModel extends AbstractTableModel {
private static final ImageIcon WWW_ICON; private static final Icon WWW_ICON;
private final List<ModFile> mods; private final List<ModFile> mods;
static { static {
WWW_ICON = SwingHelper.readImageIcon(Creator.class, "www_icon.png"); WWW_ICON = SwingHelper.createIcon(Creator.class, "www_icon.png");
} }
public ModFileTableModel(List<ModFile> mods) { public ModFileTableModel(List<ModFile> mods) {
@ -49,7 +49,7 @@ public class ModFileTableModel extends AbstractTableModel {
public Class<?> getColumnClass(int columnIndex) { public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) { switch (columnIndex) {
case 0: case 0:
return ImageIcon.class; return Icon.class;
default: default:
return String.class; return String.class;
} }

View File

@ -17,15 +17,15 @@ import java.util.List;
public class PackTableModel extends AbstractTableModel { public class PackTableModel extends AbstractTableModel {
private final ImageIcon instanceIcon; private final Icon instanceIcon;
private final ImageIcon warningIcon; private final Icon warningIcon;
private final List<Pack> packs; private final List<Pack> packs;
public PackTableModel(List<Pack> packs) { public PackTableModel(List<Pack> packs) {
this.packs = packs; this.packs = packs;
instanceIcon = SwingHelper.readImageIcon(Creator.class, "pack_icon.png"); instanceIcon = SwingHelper.createIcon(Creator.class, "pack_icon.png");
warningIcon = SwingHelper.readImageIcon(Creator.class, "warning_icon.png"); warningIcon = SwingHelper.createIcon(Creator.class, "warning_icon.png");
} }
@Override @Override
@ -50,7 +50,7 @@ public class PackTableModel extends AbstractTableModel {
public Class<?> getColumnClass(int columnIndex) { public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) { switch (columnIndex) {
case 0: case 0:
return ImageIcon.class; return Icon.class;
default: default:
return String.class; return String.class;
} }

View File

@ -16,10 +16,10 @@ import java.util.List;
public class ProblemTableModel extends AbstractTableModel { public class ProblemTableModel extends AbstractTableModel {
private static final ImageIcon WARNING_ICON; private static final Icon WARNING_ICON;
static { static {
WARNING_ICON = SwingHelper.readImageIcon(Creator.class, "warning_icon.png"); WARNING_ICON = SwingHelper.createIcon(Creator.class, "warning_icon.png");
} }
private final List<Problem> problems; private final List<Problem> problems;
@ -44,7 +44,7 @@ public class ProblemTableModel extends AbstractTableModel {
public Class<?> getColumnClass(int columnIndex) { public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) { switch (columnIndex) {
case 0: case 0:
return ImageIcon.class; return Icon.class;
case 1: case 1:
return Problem.class; return Problem.class;
default: default:

View File

@ -58,8 +58,8 @@ public class ConsoleFrame extends JFrame {
*/ */
public ConsoleFrame(@NonNull String title, int numLines, boolean colorEnabled) { public ConsoleFrame(@NonNull String title, int numLines, boolean colorEnabled) {
messageLog = new MessageLog(numLines, colorEnabled); messageLog = new MessageLog(numLines, colorEnabled);
trayRunningIcon = SwingHelper.readIconImage(Launcher.class, "tray_ok.png"); trayRunningIcon = SwingHelper.createImage(Launcher.class, "tray_ok.png");
trayClosedIcon = SwingHelper.readIconImage(Launcher.class, "tray_closed.png"); trayClosedIcon = SwingHelper.createImage(Launcher.class, "tray_closed.png");
setTitle(title); setTitle(title);
setIconImage(trayRunningIcon); setIconImage(trayRunningIcon);

View File

@ -73,7 +73,7 @@ public class LauncherFrame extends JFrame {
pack(); pack();
setLocationRelativeTo(null); setLocationRelativeTo(null);
SwingHelper.setIconImage(this, Launcher.class, "icon.png"); SwingHelper.setFrameIcon(this, Launcher.class, "icon.png");
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
@Override @Override

View File

@ -0,0 +1,38 @@
/*
* SK's Minecraft Launcher
* Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors
* Please see LICENSE.txt for license information.
*/
package com.skcraft.launcher.swing;
import javax.swing.*;
import java.awt.*;
public final class EmptyIcon implements Icon {
private int width;
private int height;
public EmptyIcon() {
this(0, 0);
}
public EmptyIcon(int width, int height) {
this.width = width;
this.height = height;
}
public int getIconHeight() {
return height;
}
public int getIconWidth() {
return width;
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
}
}

View File

@ -13,23 +13,19 @@ import com.skcraft.launcher.util.SharedLocale;
import javax.swing.*; import javax.swing.*;
import javax.swing.table.AbstractTableModel; import javax.swing.table.AbstractTableModel;
import java.awt.*;
public class InstanceTableModel extends AbstractTableModel { public class InstanceTableModel extends AbstractTableModel {
private final InstanceList instances; private final InstanceList instances;
private final ImageIcon instanceIcon; private final Icon instanceIcon;
private final ImageIcon customInstanceIcon; private final Icon customInstanceIcon;
private final ImageIcon downloadIcon; private final Icon downloadIcon;
public InstanceTableModel(InstanceList instances) { public InstanceTableModel(InstanceList instances) {
this.instances = instances; this.instances = instances;
instanceIcon = new ImageIcon(SwingHelper.readIconImage(Launcher.class, "instance_icon.png") instanceIcon = SwingHelper.createIcon(Launcher.class, "instance_icon.png", 16, 16);
.getScaledInstance(16, 16, Image.SCALE_SMOOTH)); customInstanceIcon = SwingHelper.createIcon(Launcher.class, "custom_instance_icon.png", 16, 16);
customInstanceIcon = new ImageIcon(SwingHelper.readIconImage(Launcher.class, "custom_instance_icon.png") downloadIcon = SwingHelper.createIcon(Launcher.class, "download_icon.png", 14, 14);
.getScaledInstance(16, 16, Image.SCALE_SMOOTH));
downloadIcon = new ImageIcon(SwingHelper.readIconImage(Launcher.class, "download_icon.png")
.getScaledInstance(14, 14, Image.SCALE_SMOOTH));
} }
public void update() { public void update() {

View File

@ -290,7 +290,35 @@ public final class SwingHelper {
} }
} }
public static BufferedImage readIconImage(Class<?> clazz, String path) { public static Image createImage(Class<?> clazz, String name) {
URL resource = clazz.getResource(name);
if (resource != null) {
return Toolkit.getDefaultToolkit().createImage(resource);
} else {
log.log(Level.WARNING, "Failed to read image from resource: " + name);
return null;
}
}
public static Icon createIcon(Class<?> clazz, String name) {
Image image = createImage(clazz, name);
if (image != null) {
return new ImageIcon(image);
} else {
return new EmptyIcon(16, 16);
}
}
public static Icon createIcon(Class<?> clazz, String name, int width, int height) {
Image image = createImage(clazz, name);
if (image != null) {
return new ImageIcon(image.getScaledInstance(width, height, Image.SCALE_SMOOTH));
} else {
return new EmptyIcon(width, height);
}
}
public static BufferedImage readBufferedImage(Class<?> clazz, String path) {
InputStream in = null; InputStream in = null;
try { try {
in = clazz.getResourceAsStream(path); in = clazz.getResourceAsStream(path);
@ -304,40 +332,13 @@ public final class SwingHelper {
return null; return null;
} }
public static Image readIconImageScaled(Class<?> clazz, String path, int w, int h) { public static void setFrameIcon(JFrame frame, Class<?> clazz, String path) {
BufferedImage image = readIconImage(clazz, path); BufferedImage image = readBufferedImage(clazz, path);
if (image != null) {
return image.getScaledInstance(w, h, Image.SCALE_SMOOTH);
} else {
return null;
}
}
public static void setIconImage(JFrame frame, Class<?> clazz, String path) {
BufferedImage image = readIconImage(clazz, path);
if (image != null) { if (image != null) {
frame.setIconImage(image); frame.setIconImage(image);
} }
} }
public static ImageIcon readImageIcon(Class<?> clazz, String path) {
BufferedImage image = readIconImage(clazz, path);
if (image != null) {
return new ImageIcon(image);
} else {
return null;
}
}
public static ImageIcon readImageIconScaled(Class<?> clazz, String path, int w, int h) {
Image image = readIconImageScaled(clazz, path, w, h);
if (image != null) {
return new ImageIcon(image);
} else {
return null;
}
}
/** /**
* Focus a component. * Focus a component.
* *