Files
Minecraft-Server-Launcher/src/main/java/net/knarcraft/minecraftserverlauncher/userinterface/ServerTab.java
EpicKnarvik97 b021de5594
All checks were successful
KnarCraft/Minecraft-Server-Launcher/pipeline/head This commit looks good
Replaces the "Remove server" button with an (X) on the tab itself
2021-09-29 13:16:57 +02:00

253 lines
10 KiB
Java

package net.knarcraft.minecraftserverlauncher.userinterface;
import net.knarcraft.minecraftserverlauncher.Main;
import net.knarcraft.minecraftserverlauncher.server.ServerHandler;
import net.knarcraft.minecraftserverlauncher.server.ServerTypeHandler;
import net.knarcraft.minecraftserverlauncher.server.servertypes.ServerType;
import javax.naming.ConfigurationException;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
/**
* Represents a visual server tab used to configure a server
*
* @author Kristian Knarvik <kristian.knarvik@knett.no>
* @version 1.0.0
* @since 1.0.0
*/
public class ServerTab implements ActionListener {
private final JComboBox<String> serverTypes;
private final JComboBox<String> serverVersions;
private final JComboBox<String> maxRam;
private final JCheckBox enabledCheckbox;
private final JButton browseButton;
private final JTextField directory;
private final JPanel panel;
/**
* Initializes a new server tab with the given name
*
* @param name <p>The name of the new server tab</p>
* @throws ConfigurationException <p>If unable to create the new tab</p>
*/
public ServerTab(String name) throws ConfigurationException {
panel = new JPanel();
Main.getController().getGUI().getPane().addTab(name, null, panel, null);
SpringLayout sl_panel_3 = new SpringLayout();
panel.setLayout(sl_panel_3);
JLabel lblServerType = new JLabel("Server type");
sl_panel_3.putConstraint(SpringLayout.WEST, lblServerType, 10, SpringLayout.WEST, panel);
panel.add(lblServerType);
JLabel lblServerVersion = new JLabel("Server version");
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerVersion, 6, SpringLayout.SOUTH, lblServerType);
sl_panel_3.putConstraint(SpringLayout.WEST, lblServerVersion, 10, SpringLayout.WEST, panel);
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerVersion, 26, SpringLayout.SOUTH, lblServerType);
panel.add(lblServerVersion);
serverTypes = new JComboBox<>(ServerTypeHandler.getTypeNames());
sl_panel_3.putConstraint(SpringLayout.NORTH, serverTypes, 10, SpringLayout.NORTH, panel);
sl_panel_3.putConstraint(SpringLayout.WEST, serverTypes, 5, SpringLayout.EAST, lblServerVersion);
sl_panel_3.putConstraint(SpringLayout.EAST, serverTypes, 154, SpringLayout.WEST, serverTypes);
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerType, 0, SpringLayout.NORTH, serverTypes);
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerType, 0, SpringLayout.SOUTH, serverTypes);
panel.add(serverTypes);
serverTypes.addActionListener(this);
serverVersions = new JComboBox<>(ServerTypeHandler.getServerTypes().get(0).getVersions());
sl_panel_3.putConstraint(SpringLayout.NORTH, serverVersions, 6, SpringLayout.SOUTH, serverTypes);
sl_panel_3.putConstraint(SpringLayout.EAST, serverVersions, 0, SpringLayout.EAST, serverTypes);
sl_panel_3.putConstraint(SpringLayout.WEST, serverVersions, 6, SpringLayout.EAST, lblServerVersion);
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerVersion, 0, SpringLayout.NORTH, serverVersions);
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerVersion, 0, SpringLayout.SOUTH, serverVersions);
panel.add(serverVersions);
serverVersions.addActionListener(this);
JLabel lblMaxRam = new JLabel("Max ram");
sl_panel_3.putConstraint(SpringLayout.NORTH, lblMaxRam, 0, SpringLayout.NORTH, serverTypes);
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblMaxRam, 0, SpringLayout.SOUTH, serverTypes);
sl_panel_3.putConstraint(SpringLayout.WEST, lblMaxRam, 6, SpringLayout.EAST, serverTypes);
panel.add(lblMaxRam);
maxRam = new JComboBox<>(ServerHandler.getRamList());
sl_panel_3.putConstraint(SpringLayout.NORTH, maxRam, 0, SpringLayout.NORTH, serverTypes);
sl_panel_3.putConstraint(SpringLayout.WEST, maxRam, 6, SpringLayout.EAST, lblMaxRam);
sl_panel_3.putConstraint(SpringLayout.EAST, maxRam, -10, SpringLayout.EAST, panel);
panel.add(maxRam);
maxRam.addActionListener(this);
enabledCheckbox = new JCheckBox("Enabled");
sl_panel_3.putConstraint(SpringLayout.WEST, enabledCheckbox, 10, SpringLayout.WEST, panel);
panel.add(enabledCheckbox);
enabledCheckbox.addActionListener(this);
JLabel lblDirectory = new JLabel("Directory");
sl_panel_3.putConstraint(SpringLayout.WEST, lblDirectory, 6, SpringLayout.EAST, enabledCheckbox);
panel.add(lblDirectory);
directory = new JTextField();
sl_panel_3.putConstraint(SpringLayout.WEST, directory, 6, SpringLayout.EAST, lblDirectory);
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblDirectory, 0, SpringLayout.SOUTH, directory);
sl_panel_3.putConstraint(SpringLayout.NORTH, lblDirectory, 0, SpringLayout.NORTH, directory);
sl_panel_3.putConstraint(SpringLayout.NORTH, enabledCheckbox, 0, SpringLayout.NORTH, directory);
sl_panel_3.putConstraint(SpringLayout.SOUTH, enabledCheckbox, 0, SpringLayout.SOUTH, directory);
panel.add(directory);
directory.setColumns(10);
directory.addActionListener(this);
browseButton = new JButton("Browse");
sl_panel_3.putConstraint(SpringLayout.EAST, directory, -6, SpringLayout.WEST, browseButton);
sl_panel_3.putConstraint(SpringLayout.NORTH, browseButton, 3, SpringLayout.SOUTH, serverVersions);
sl_panel_3.putConstraint(SpringLayout.EAST, browseButton, -10, SpringLayout.EAST, panel);
sl_panel_3.putConstraint(SpringLayout.SOUTH, directory, 0, SpringLayout.SOUTH, browseButton);
sl_panel_3.putConstraint(SpringLayout.NORTH, directory, 0, SpringLayout.NORTH, browseButton);
panel.add(browseButton);
browseButton.addActionListener(this);
}
/**
* Updates the server tab components according to the received parameters
*
* @param path <p>The new path of the server tab</p>
* @param isEnabled <p>Whether to mark the server as enabled</p>
* @param typeName <p>The name of the selected server type</p>
* @param serverVersion <p>The version of the server</p>
* @param maxRam <p>The maximum usable ram for the server</p>
*/
public void setData(String path, boolean isEnabled, String typeName, String serverVersion, String maxRam) throws ConfigurationException {
this.directory.setText(path);
this.enabledCheckbox.setSelected(isEnabled);
this.serverTypes.setSelectedItem(typeName);
this.updateServerVersion();
this.serverVersions.setSelectedItem(serverVersion);
this.maxRam.setSelectedItem(maxRam);
}
/**
* Gets the JPanel containing the server tab's elements
*
* @return <p>The JPanel containing the server tab's elements</p>
*/
public JPanel getPanel() {
return this.panel;
}
/**
* Gets the file path selected by the user
*
* @return <p>The file path selected by the user</p>
*/
public String getPath() {
return this.directory.getText();
}
/**
* Gets the maximum RAM selected by the user
*
* @return <p>The maximum RAM selected by the user</p>
*/
public String getMaxRam() {
Object selected = this.maxRam.getSelectedItem();
if (selected != null) {
return selected.toString();
} else {
return "512M";
}
}
/**
* Gets the server type selected by the user
*
* @return <p>The server type selected by the user</p>
*/
public String getType() {
Object selected = this.serverTypes.getSelectedItem();
if (selected != null) {
return selected.toString();
} else {
return "Vanilla";
}
}
/**
* Gets the server version selected by the user
*
* @return <p>The server version selected by the user</p>
*/
public String getVersion() {
Object selected = this.serverVersions.getSelectedItem();
if (selected != null) {
return selected.toString();
} else {
return "Latest";
}
}
/**
* Checks whether this server is enabled
*
* @return <p>True if this server is enabled</p>
*/
public boolean isEnabled() {
return this.enabledCheckbox.isSelected();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == browseButton) {
browse();
} else if (e.getSource() == serverTypes) {
try {
updateServerVersion();
} catch (ConfigurationException e1) {
e1.printStackTrace();
}
}
}
/**
* Asks the user for server location and updates the GUI if given a valid value
*/
private void browse() {
File chosenFolder = Main.getController().getGUI().askForDirectory("Server folder");
if (chosenFolder != null) {
directory.setText(chosenFolder.toString());
}
}
/**
* Updates server version choices according to the server type
*/
private void updateServerVersion() throws ConfigurationException {
serverVersions.removeAllItems();
String selectedServerTypes = null;
Object selectedType = serverTypes.getSelectedItem();
if (selectedType != null) {
selectedServerTypes = selectedType.toString();
}
if (selectedServerTypes == null) {
return;
}
if (selectedServerTypes.equals("Custom")) {
serverVersions.setEditable(true);
} else {
serverVersions.setEditable(false);
ServerType current = null;
for (ServerType servertype : ServerTypeHandler.getServerTypes()) {
if (servertype.getName().equals(selectedServerTypes)) {
current = servertype;
}
}
if (current != null) {
for (String version : current.getVersions()) {
serverVersions.addItem(version);
}
}
}
}
}