![JAR search and dependency download from the Maven repository](/logo.png)
net.namekdev.entity_tracker.ui.partials.ComponentDataPanel Maven / Gradle / Ivy
package net.namekdev.entity_tracker.ui.partials;
import static net.namekdev.entity_tracker.utils.serialization.NetworkSerialization.*;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
import net.namekdev.entity_tracker.connectors.DummyWorldUpdateListener;
import net.namekdev.entity_tracker.connectors.WorldUpdateListener;
import net.namekdev.entity_tracker.model.ComponentTypeInfo;
import net.namekdev.entity_tracker.model.FieldInfo;
import net.namekdev.entity_tracker.ui.Context;
public class ComponentDataPanel extends JPanel {
private Context _appContext;
private ComponentTypeInfo _info;
private int _entityId;
private Vector _components;
public ComponentDataPanel(Context appContext, ComponentTypeInfo info, int entityId) {
_appContext = appContext;
_info = info;
_entityId = entityId;
initialize();
}
protected void initialize() {
MigLayout layout = new MigLayout("wrap", "[right][0:pref,grow]", "");
setLayout(layout);
int size = _info.fields.size();
_components = new Vector(size);
for (int i = 0; i < size; ++i) {
FieldInfo field = _info.fields.get(i);
JLabel label = new JLabel(field.fieldName);
JComponent value = null;
if (field.valueType == TYPE_BOOLEAN) {
JCheckBox checkbox = new JCheckBox();
value = checkbox;
setupCheckBoxListener(checkbox, i);
}
else if (field.valueType == TYPE_UNKNOWN) {
value = new JLabel("");
}
else {
final JTextField textField = new JTextField();
value = textField;
setupTextFieldListener(textField, i);
}
_components.add(value);
add(label);
add(value, "width min:50, grow");
}
// register listener for component data
_appContext.eventBus.registerListener(worldListener);
}
private void setupCheckBoxListener(final JCheckBox checkbox, final int fieldIndex) {
checkbox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean value = checkbox.isSelected();
_appContext.worldController.setComponentFieldValue(_entityId, _info.index, fieldIndex, value);
}
});
}
private void setupTextFieldListener(final JTextField textField, final int fieldIndex) {
textField.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
// on enter
if (e.getKeyCode() == 10) {
String text = textField.getText();
// TODO convert string to appropriate field's type
_appContext.worldController.setComponentFieldValue(_entityId, _info.index, fieldIndex, text);
}
}
});
}
@Override
public void removeNotify() {
super.removeNotify();
_appContext.eventBus.unregisterListener(worldListener);
}
private final WorldUpdateListener worldListener = new DummyWorldUpdateListener() {
@Override
public void updatedComponentState(int entityId, int componentIndex, Object[] values) {
if (_info.index != componentIndex || _entityId != entityId) {
return;
}
for (int i = 0, n = values.length; i < n; ++i) {
Object value = values[i];
if (value == null) {
continue;
}
Component component = _components.get(i);
FieldInfo info = _info.fields.get(i);
if (info.valueType == TYPE_BOOLEAN) {
((JCheckBox) component).setSelected((Boolean) values[i]);
}
else if (info.valueType != TYPE_UNKNOWN) {
((JTextField) component).setText(values[i].toString());
}
}
}
};
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy