mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-09-18 18:01:17 +02:00
Additional implementations for the configuration GUI and custom
actions
This commit is contained in:
parent
fe9a868169
commit
c5f910de21
@ -9,9 +9,9 @@ package cc.co.evenprime.bukkit.nocheat.actions;
|
|||||||
public abstract class Action {
|
public abstract class Action {
|
||||||
|
|
||||||
public final int firstAfter;
|
public final int firstAfter;
|
||||||
public final boolean repeat;
|
public final int repeat;
|
||||||
|
|
||||||
public Action(int firstAfter, boolean repeat) {
|
public Action(int firstAfter, int repeat) {
|
||||||
this.firstAfter = firstAfter;
|
this.firstAfter = firstAfter;
|
||||||
this.repeat = repeat;
|
this.repeat = repeat;
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ public class CancelAction extends Action {
|
|||||||
|
|
||||||
public final static CancelAction cancel = new CancelAction();
|
public final static CancelAction cancel = new CancelAction();
|
||||||
|
|
||||||
private CancelAction() { super(1, true); }
|
private CancelAction() { super(1, 1); }
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "cancel";
|
return "cancel";
|
||||||
|
@ -10,7 +10,7 @@ public class CustomAction extends Action {
|
|||||||
|
|
||||||
public final String command;
|
public final String command;
|
||||||
|
|
||||||
public CustomAction(int firstAfter, boolean repeat, String command) {
|
public CustomAction(int firstAfter, int repeat, String command) {
|
||||||
super(firstAfter, repeat);
|
super(firstAfter, repeat);
|
||||||
this.command = command;
|
this.command = command;
|
||||||
}
|
}
|
||||||
|
@ -11,13 +11,13 @@ public class LogAction extends Action {
|
|||||||
|
|
||||||
public final Level level;
|
public final Level level;
|
||||||
|
|
||||||
public final static LogAction loglow = new LogAction(1, false, Level.INFO);
|
public final static LogAction loglow = new LogAction(1, 0, Level.INFO);
|
||||||
public final static LogAction logmed = new LogAction(1, false, Level.WARNING);
|
public final static LogAction logmed = new LogAction(1, 0, Level.WARNING);
|
||||||
public final static LogAction loghigh = new LogAction(1, false, Level.SEVERE);
|
public final static LogAction loghigh = new LogAction(1, 0, Level.SEVERE);
|
||||||
|
|
||||||
public final static LogAction[] log = { loglow, logmed, loghigh };
|
public final static LogAction[] log = { loglow, logmed, loghigh };
|
||||||
|
|
||||||
public LogAction(int firstAfter, boolean repeat, Level level) {
|
public LogAction(int firstAfter, int repeat, Level level) {
|
||||||
super(firstAfter, repeat);
|
super(firstAfter, repeat);
|
||||||
this.level = level;
|
this.level = level;
|
||||||
}
|
}
|
||||||
|
@ -30,10 +30,7 @@ import cc.co.evenprime.bukkit.nocheat.listeners.AirbuildBlockListener;
|
|||||||
public class AirbuildCheck extends Check {
|
public class AirbuildCheck extends Check {
|
||||||
|
|
||||||
// How should airbuild violations be treated?
|
// How should airbuild violations be treated?
|
||||||
private final Action actions[][] = {
|
private Action actions[][];
|
||||||
{ LogAction.loglow, CancelAction.cancel },
|
|
||||||
{ LogAction.logmed, CancelAction.cancel },
|
|
||||||
{ LogAction.loghigh, CancelAction.cancel } };
|
|
||||||
|
|
||||||
private int limits[];
|
private int limits[];
|
||||||
|
|
||||||
@ -135,6 +132,12 @@ public class AirbuildCheck extends Check {
|
|||||||
limits[1] = config.getIntegerValue("airbuild.limits.med");
|
limits[1] = config.getIntegerValue("airbuild.limits.med");
|
||||||
limits[2] = config.getIntegerValue("airbuild.limits.high");
|
limits[2] = config.getIntegerValue("airbuild.limits.high");
|
||||||
|
|
||||||
|
actions = new Action[3][];
|
||||||
|
|
||||||
|
actions[0] = config.getActionValue("airbuild.action.low");
|
||||||
|
actions[1] = config.getActionValue("airbuild.action.med");
|
||||||
|
actions[2] = config.getActionValue("airbuild.action.high");
|
||||||
|
|
||||||
setActive(config.getBooleanValue("active.airbuild"));
|
setActive(config.getBooleanValue("active.airbuild"));
|
||||||
|
|
||||||
} catch (ConfigurationException e) {
|
} catch (ConfigurationException e) {
|
||||||
|
@ -65,10 +65,7 @@ public class MovingCheck extends Check {
|
|||||||
private String summaryMessage;
|
private String summaryMessage;
|
||||||
|
|
||||||
// How should moving violations be treated?
|
// How should moving violations be treated?
|
||||||
private final Action actions[][] = {
|
private Action actions[][];
|
||||||
{ LogAction.loglow, CancelAction.cancel },
|
|
||||||
{ LogAction.logmed, CancelAction.cancel },
|
|
||||||
{ LogAction.loghigh, CancelAction.cancel } };
|
|
||||||
|
|
||||||
public long statisticTotalEvents = 1; // Prevent accidental division by 0 at some point
|
public long statisticTotalEvents = 1; // Prevent accidental division by 0 at some point
|
||||||
|
|
||||||
@ -659,6 +656,12 @@ public class MovingCheck extends Check {
|
|||||||
logMessage = config.getStringValue("moving.logmessage");
|
logMessage = config.getStringValue("moving.logmessage");
|
||||||
summaryMessage = config.getStringValue("moving.summarymessage");
|
summaryMessage = config.getStringValue("moving.summarymessage");
|
||||||
|
|
||||||
|
actions = new Action[3][];
|
||||||
|
|
||||||
|
actions[0] = config.getActionValue("moving.action.low");
|
||||||
|
actions[1] = config.getActionValue("moving.action.med");
|
||||||
|
actions[2] = config.getActionValue("moving.action.high");
|
||||||
|
|
||||||
setActive(config.getBooleanValue("active.moving"));
|
setActive(config.getBooleanValue("active.moving"));
|
||||||
} catch (ConfigurationException e) {
|
} catch (ConfigurationException e) {
|
||||||
setActive(false);
|
setActive(false);
|
||||||
|
@ -41,10 +41,7 @@ public class SpeedhackCheck extends Check {
|
|||||||
private String logMessage;
|
private String logMessage;
|
||||||
|
|
||||||
// How should speedhack violations be treated?
|
// How should speedhack violations be treated?
|
||||||
private Action actions[][] = {
|
private Action actions[][];
|
||||||
{ LogAction.loglow, CancelAction.cancel },
|
|
||||||
{ LogAction.logmed, CancelAction.cancel },
|
|
||||||
{ LogAction.loghigh, CancelAction.cancel } };
|
|
||||||
|
|
||||||
public void check(PlayerMoveEvent event) {
|
public void check(PlayerMoveEvent event) {
|
||||||
|
|
||||||
@ -160,6 +157,12 @@ public class SpeedhackCheck extends Check {
|
|||||||
|
|
||||||
logMessage = config.getStringValue("speedhack.logmessage");
|
logMessage = config.getStringValue("speedhack.logmessage");
|
||||||
|
|
||||||
|
actions = new Action[3][];
|
||||||
|
|
||||||
|
actions[0] = config.getActionValue("speedhack.action.low");
|
||||||
|
actions[1] = config.getActionValue("speedhack.action.med");
|
||||||
|
actions[2] = config.getActionValue("speedhack.action.high");
|
||||||
|
|
||||||
setActive(config.getBooleanValue("active.speedhack"));
|
setActive(config.getBooleanValue("active.speedhack"));
|
||||||
} catch (ConfigurationException e) {
|
} catch (ConfigurationException e) {
|
||||||
setActive(false);
|
setActive(false);
|
||||||
|
@ -0,0 +1,87 @@
|
|||||||
|
package cc.co.evenprime.bukkit.nocheat.config;
|
||||||
|
|
||||||
|
import cc.co.evenprime.bukkit.nocheat.actions.CustomAction;
|
||||||
|
|
||||||
|
public class CustomActionOption extends ChildOption {
|
||||||
|
|
||||||
|
private int firstAfter;
|
||||||
|
private int repeat;
|
||||||
|
private String command;
|
||||||
|
|
||||||
|
|
||||||
|
public CustomActionOption(String identifier, String command) {
|
||||||
|
|
||||||
|
super(identifier);
|
||||||
|
|
||||||
|
this.parseCommand(command);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void parseCommand(String command) {
|
||||||
|
|
||||||
|
if(command.matches("\\[[0-9]*,[0-9]*\\] .*")) {
|
||||||
|
String s[] = command.split(" ", 2);
|
||||||
|
String s2[] = s[0].replace("[", "").replace("]", "").split(",");
|
||||||
|
this.firstAfter = Integer.parseInt(s2[0]);
|
||||||
|
this.repeat = Integer.parseInt(s2[1]);
|
||||||
|
this.command = s[1];
|
||||||
|
}
|
||||||
|
else if(command.matches("\\[[0-9]*\\] .*")) {
|
||||||
|
String s[] = command.split(" ", 2);
|
||||||
|
this.firstAfter = Integer.parseInt(s[0].replace("[", "").replace("]", ""));
|
||||||
|
this.repeat = 1;
|
||||||
|
this.command = s[1];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.command = command;
|
||||||
|
this.firstAfter = 1;
|
||||||
|
this.repeat = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
if(firstAfter <= 1) {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
else if(repeat <= 0) {
|
||||||
|
return "["+firstAfter+"] "+ command;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return "["+firstAfter+","+repeat+"] "+ command;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public CustomAction getCustomActionValue() {
|
||||||
|
return new CustomAction(firstAfter, repeat, command);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCommandValue() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCommandValue(String command) {
|
||||||
|
this.command = command;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepeatValue(int value) {
|
||||||
|
this.repeat = value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRepeatValue() {
|
||||||
|
return repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFirstAfterValue() {
|
||||||
|
return firstAfter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirsttAfterValue(int value) {
|
||||||
|
this.firstAfter = value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -209,6 +209,21 @@ public class NoCheatConfiguration {
|
|||||||
root.add(bogusitemsNode);
|
root.add(bogusitemsNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*** CUSTOMACTIONS section ***/
|
||||||
|
{
|
||||||
|
ParentOption customActionsNode = new ParentOption("customactions");
|
||||||
|
root.add(customActionsNode);
|
||||||
|
|
||||||
|
customActionsNode.add(new CustomActionOption("mycommand",
|
||||||
|
CONFIG.getString("customactions.mycommand", "[4,8] TESTCOMMAND")));
|
||||||
|
|
||||||
|
customActionsNode.add(new CustomActionOption("mycommand2",
|
||||||
|
CONFIG.getString("customactions.mycommand2", "TESTCOMMAND2")));
|
||||||
|
|
||||||
|
customActionsNode.add(new CustomActionOption("mycommand3",
|
||||||
|
CONFIG.getString("customactions.mycommand3", "[7] TESTCOMMAND3")));
|
||||||
|
}
|
||||||
|
|
||||||
if(!configurationFile.exists()) {
|
if(!configurationFile.exists()) {
|
||||||
writeConfigFile(configurationFile, this);
|
writeConfigFile(configurationFile, this);
|
||||||
}
|
}
|
||||||
@ -246,9 +261,7 @@ public class NoCheatConfiguration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Action[] stringToActions(String string, Action[] def) {
|
public static Action[] stringToActions(String string) {
|
||||||
|
|
||||||
if(string == null) return def;
|
|
||||||
|
|
||||||
List<Action> as = new LinkedList<Action>();
|
List<Action> as = new LinkedList<Action>();
|
||||||
String[] parts = string.split(" ");
|
String[] parts = string.split(" ");
|
||||||
@ -280,8 +293,7 @@ public class NoCheatConfiguration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return as.toArray(new Action[as.size()]);
|
||||||
return as.toArray(def);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String actionsToString(Action[] actions) {
|
private String actionsToString(Action[] actions) {
|
||||||
@ -297,37 +309,6 @@ public class NoCheatConfiguration {
|
|||||||
return s.toString().trim();
|
return s.toString().trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a string into a log level
|
|
||||||
* @param string
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private static Level stringToLevel(String string, Level def) {
|
|
||||||
|
|
||||||
if(string == null) {
|
|
||||||
return def;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(string.trim().equals("info") || string.trim().equals("low")) return Level.INFO;
|
|
||||||
if(string.trim().equals("warn") || string.trim().equals("med")) return Level.WARNING;
|
|
||||||
if(string.trim().equals("severe")|| string.trim().equals("high")) return Level.SEVERE;
|
|
||||||
|
|
||||||
return Level.OFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String levelToString(Level level) {
|
|
||||||
|
|
||||||
if(level == null) {
|
|
||||||
return "off";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(level.equals(Level.INFO)) return "low";
|
|
||||||
else if(level.equals(Level.WARNING)) return "med";
|
|
||||||
else if(level.equals(Level.SEVERE)) return "high";
|
|
||||||
|
|
||||||
return "off";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write configuration file to specific filename
|
* Write configuration file to specific filename
|
||||||
* @param f
|
* @param f
|
||||||
@ -336,6 +317,7 @@ public class NoCheatConfiguration {
|
|||||||
try {
|
try {
|
||||||
if(f.getParentFile() != null)
|
if(f.getParentFile() != null)
|
||||||
f.getParentFile().mkdirs();
|
f.getParentFile().mkdirs();
|
||||||
|
|
||||||
f.createNewFile();
|
f.createNewFile();
|
||||||
BufferedWriter w = new BufferedWriter(new FileWriter(f));
|
BufferedWriter w = new BufferedWriter(new FileWriter(f));
|
||||||
|
|
||||||
@ -347,6 +329,10 @@ public class NoCheatConfiguration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Action[] getActionValue(String optionName) throws ConfigurationException {
|
||||||
|
return stringToActions(getStringOption(optionName).getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getIntegerValue(String optionName) throws ConfigurationException {
|
public int getIntegerValue(String optionName) throws ConfigurationException {
|
||||||
return getIntegerOption(optionName).getIntegerValue();
|
return getIntegerOption(optionName).getIntegerValue();
|
||||||
|
@ -1,17 +1,21 @@
|
|||||||
package cc.co.evenprime.bukkit.nocheat.wizard.gui;
|
package cc.co.evenprime.bukkit.nocheat.wizard.gui;
|
||||||
|
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
import javax.swing.BoxLayout;
|
||||||
import javax.swing.InputVerifier;
|
import javax.swing.InputVerifier;
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
|
|
||||||
import cc.co.evenprime.bukkit.nocheat.config.BooleanOption;
|
import cc.co.evenprime.bukkit.nocheat.config.BooleanOption;
|
||||||
import cc.co.evenprime.bukkit.nocheat.config.ChildOption;
|
import cc.co.evenprime.bukkit.nocheat.config.ChildOption;
|
||||||
|
import cc.co.evenprime.bukkit.nocheat.config.CustomActionOption;
|
||||||
import cc.co.evenprime.bukkit.nocheat.config.LevelOption;
|
import cc.co.evenprime.bukkit.nocheat.config.LevelOption;
|
||||||
import cc.co.evenprime.bukkit.nocheat.config.TextFieldOption;
|
import cc.co.evenprime.bukkit.nocheat.config.TextFieldOption;
|
||||||
|
|
||||||
@ -28,6 +32,9 @@ public class ChildOptionGuiFactory {
|
|||||||
else if(option instanceof LevelOption) {
|
else if(option instanceof LevelOption) {
|
||||||
return createLogLevel((LevelOption)option);
|
return createLogLevel((LevelOption)option);
|
||||||
}
|
}
|
||||||
|
else if(option instanceof CustomActionOption) {
|
||||||
|
return createCustomAction((CustomActionOption)option);
|
||||||
|
}
|
||||||
|
|
||||||
throw new RuntimeException("Unknown ChildOption " + option);
|
throw new RuntimeException("Unknown ChildOption " + option);
|
||||||
}
|
}
|
||||||
@ -54,6 +61,75 @@ public class ChildOptionGuiFactory {
|
|||||||
return comboBox;
|
return comboBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static JPanel createCustomAction(final CustomActionOption option) {
|
||||||
|
|
||||||
|
final JPanel panel = new JPanel();
|
||||||
|
|
||||||
|
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
final JTextField command = new JTextField(option.getCommandValue());
|
||||||
|
|
||||||
|
command.setColumns(55);
|
||||||
|
command.setInputVerifier(new InputVerifier() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean verify(JComponent arg0) {
|
||||||
|
option.setCommandValue(command.getText());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
final JTextField repeat = new JTextField(String.valueOf(option.getRepeatValue()));
|
||||||
|
|
||||||
|
repeat.setColumns(3);
|
||||||
|
|
||||||
|
repeat.setInputVerifier(new InputVerifier() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean verify(JComponent arg0) {
|
||||||
|
int value;
|
||||||
|
try {
|
||||||
|
value = Integer.parseInt(repeat.getText());
|
||||||
|
option.setRepeatValue(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
JOptionPane.showMessageDialog(repeat, "Illegal value for this field");
|
||||||
|
repeat.setText(String.valueOf(option.getRepeatValue()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
final JTextField firstAfter = new JTextField(String.valueOf(option.getFirstAfterValue()));
|
||||||
|
|
||||||
|
firstAfter.setColumns(3);
|
||||||
|
|
||||||
|
firstAfter.setInputVerifier(new InputVerifier() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean verify(JComponent arg0) {
|
||||||
|
int value;
|
||||||
|
try {
|
||||||
|
value = Integer.parseInt(firstAfter.getText());
|
||||||
|
option.setFirsttAfterValue(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
JOptionPane.showMessageDialog(firstAfter, "Illegal value for this field");
|
||||||
|
firstAfter.setText(String.valueOf(option.getFirstAfterValue()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
panel.add(firstAfter);
|
||||||
|
panel.add(repeat);
|
||||||
|
panel.add(command);
|
||||||
|
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
private static JCheckBox createBoolean(final BooleanOption option) {
|
private static JCheckBox createBoolean(final BooleanOption option) {
|
||||||
|
|
||||||
final JCheckBox checkBox = new JCheckBox();
|
final JCheckBox checkBox = new JCheckBox();
|
||||||
|
@ -48,7 +48,7 @@ public class ParentOptionGui extends JPanel {
|
|||||||
|
|
||||||
c.gridx = 0;
|
c.gridx = 0;
|
||||||
c.gridy = children.size();
|
c.gridy = children.size();
|
||||||
c.gridwidth = 3; // Spans over both columns
|
c.gridwidth = 3; // Spans over three columns
|
||||||
c.anchor = GridBagConstraints.WEST;
|
c.anchor = GridBagConstraints.WEST;
|
||||||
c.ipadx = 5;
|
c.ipadx = 5;
|
||||||
c.ipady = 15;
|
c.ipady = 15;
|
||||||
@ -63,7 +63,7 @@ public class ParentOptionGui extends JPanel {
|
|||||||
|
|
||||||
c.gridx = 0;
|
c.gridx = 0;
|
||||||
c.gridy = children.size();
|
c.gridy = children.size();
|
||||||
c.gridwidth = 1; // Spans over both columns
|
c.gridwidth = 1;
|
||||||
c.anchor = GridBagConstraints.WEST;
|
c.anchor = GridBagConstraints.WEST;
|
||||||
c.ipadx = 10;
|
c.ipadx = 10;
|
||||||
c.weightx = 0;
|
c.weightx = 0;
|
||||||
@ -72,10 +72,11 @@ public class ParentOptionGui extends JPanel {
|
|||||||
|
|
||||||
c.gridx = 1;
|
c.gridx = 1;
|
||||||
c.gridy = children.size();
|
c.gridy = children.size();
|
||||||
c.gridwidth = 1; // Spans over both columns
|
c.gridwidth = 1;
|
||||||
c.anchor = GridBagConstraints.WEST;
|
c.anchor = GridBagConstraints.WEST;
|
||||||
c.ipadx = 5;
|
c.ipadx = 5;
|
||||||
c.weightx = 0;
|
c.weightx = 0;
|
||||||
|
c.fill = GridBagConstraints.HORIZONTAL;
|
||||||
|
|
||||||
JComponent child = ChildOptionGuiFactory.create((ChildOption)option);
|
JComponent child = ChildOptionGuiFactory.create((ChildOption)option);
|
||||||
|
|
||||||
@ -83,11 +84,11 @@ public class ParentOptionGui extends JPanel {
|
|||||||
|
|
||||||
c.gridx = 2;
|
c.gridx = 2;
|
||||||
c.gridy = children.size();
|
c.gridy = children.size();
|
||||||
c.gridwidth = 1; // Spans over both columns
|
c.gridwidth = 1;
|
||||||
c.anchor = GridBagConstraints.WEST;
|
c.anchor = GridBagConstraints.WEST;
|
||||||
c.ipadx = 5;
|
c.ipadx = 5;
|
||||||
c.weightx = 1;
|
c.weightx = 1;
|
||||||
c.fill = GridBagConstraints.HORIZONTAL;
|
|
||||||
|
|
||||||
this.add(Box.createHorizontalGlue(), c);
|
this.add(Box.createHorizontalGlue(), c);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user