Building params and headers tables
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
package ovh.alexisdelhaie.endpoint;
|
package ovh.alexisdelhaie.endpoint;
|
||||||
|
|
||||||
import com.formdev.flatlaf.FlatIntelliJLaf;
|
import com.formdev.flatlaf.FlatIntelliJLaf;
|
||||||
|
import ovh.alexisdelhaie.endpoint.utils.Tools;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
public class Application {
|
public class Application {
|
||||||
|
|
||||||
@@ -12,7 +14,7 @@ public class Application {
|
|||||||
dialog.pack();
|
dialog.pack();
|
||||||
dialog.setTitle("EndPoint");
|
dialog.setTitle("EndPoint");
|
||||||
dialog.setVisible(true);
|
dialog.setVisible(true);
|
||||||
dialog.centerFrame();
|
Tools.centerFrame(dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="ovh.alexisdelhaie.endpoint.MainWindow">
|
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="ovh.alexisdelhaie.endpoint.MainWindow">
|
||||||
<grid id="cbd77" binding="contentPane" layout-manager="GridLayoutManager" row-count="3" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
<grid id="cbd77" binding="contentPane" layout-manager="GridLayoutManager" row-count="4" column-count="9" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
<margin top="10" left="10" bottom="10" right="10"/>
|
<margin top="10" left="10" bottom="10" right="10"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<xy x="48" y="54" width="1098" height="665"/>
|
<xy x="48" y="54" width="1098" height="665"/>
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<properties/>
|
<properties/>
|
||||||
<border type="none"/>
|
<border type="none"/>
|
||||||
<children>
|
<children>
|
||||||
<component id="d63fe" class="javax.swing.JComboBox" binding="comboBox1" default-binding="true">
|
<component id="d63fe" class="javax.swing.JComboBox" binding="methodBox">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -22,9 +22,9 @@
|
|||||||
</model>
|
</model>
|
||||||
</properties>
|
</properties>
|
||||||
</component>
|
</component>
|
||||||
<component id="4f0bf" class="javax.swing.JTextField" binding="textField1" default-binding="true">
|
<component id="4f0bf" class="javax.swing.JTextField" binding="urlField">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
|
<grid row="0" column="1" row-span="1" col-span="7" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
|
||||||
<preferred-size width="150" height="-1"/>
|
<preferred-size width="150" height="-1"/>
|
||||||
</grid>
|
</grid>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
</component>
|
</component>
|
||||||
<component id="842fb" class="javax.swing.JButton" binding="sendButton">
|
<component id="842fb" class="javax.swing.JButton" binding="sendButton">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
<grid row="0" column="8" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties>
|
<properties>
|
||||||
<text value="Send"/>
|
<text value="Send"/>
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
</component>
|
</component>
|
||||||
<tabbedpane id="59105" binding="tabbedPane1" default-binding="true">
|
<tabbedpane id="59105" binding="tabbedPane1" default-binding="true">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="2" column="0" row-span="1" col-span="3" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
<grid row="2" column="0" row-span="1" col-span="9" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||||
<preferred-size width="200" height="200"/>
|
<preferred-size width="200" height="200"/>
|
||||||
</grid>
|
</grid>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -50,12 +50,51 @@
|
|||||||
</tabbedpane>
|
</tabbedpane>
|
||||||
<component id="269e7" class="javax.swing.JButton" binding="newTabButton">
|
<component id="269e7" class="javax.swing.JButton" binding="newTabButton">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="1" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
<grid row="1" column="8" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties>
|
<properties>
|
||||||
<text value="+"/>
|
<text value="+"/>
|
||||||
</properties>
|
</properties>
|
||||||
</component>
|
</component>
|
||||||
|
<component id="865d3" class="javax.swing.JProgressBar" binding="progressBar1" default-binding="true">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<indeterminate value="true"/>
|
||||||
|
<visible value="false"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<hspacer id="99ebb">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="3" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</hspacer>
|
||||||
|
<hspacer id="106fa">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="4" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</hspacer>
|
||||||
|
<hspacer id="82267">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="5" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</hspacer>
|
||||||
|
<hspacer id="b9351">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="6" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</hspacer>
|
||||||
|
<hspacer id="14145">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="7" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</hspacer>
|
||||||
|
<hspacer id="330cc">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="2" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</hspacer>
|
||||||
</children>
|
</children>
|
||||||
</grid>
|
</grid>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -6,14 +6,21 @@ import ovh.alexisdelhaie.endpoint.http.HttpClient;
|
|||||||
import ovh.alexisdelhaie.endpoint.http.Request;
|
import ovh.alexisdelhaie.endpoint.http.Request;
|
||||||
import ovh.alexisdelhaie.endpoint.http.RequestBuilder;
|
import ovh.alexisdelhaie.endpoint.http.RequestBuilder;
|
||||||
import ovh.alexisdelhaie.endpoint.http.Response;
|
import ovh.alexisdelhaie.endpoint.http.Response;
|
||||||
|
import ovh.alexisdelhaie.endpoint.utils.MessageDialog;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.ChangeEvent;
|
||||||
|
import javax.swing.event.ChangeListener;
|
||||||
|
import javax.swing.event.DocumentEvent;
|
||||||
|
import javax.swing.event.DocumentListener;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.KeyManagementException;
|
import java.security.KeyManagementException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class MainWindow extends JFrame {
|
public class MainWindow extends JFrame {
|
||||||
@@ -23,65 +30,107 @@ public class MainWindow extends JFrame {
|
|||||||
public final static int HEIGHT = 720;
|
public final static int HEIGHT = 720;
|
||||||
|
|
||||||
private JPanel contentPane;
|
private JPanel contentPane;
|
||||||
private JComboBox<String> comboBox1;
|
private JComboBox<String> methodBox;
|
||||||
private JTextField textField1;
|
private JTextField urlField;
|
||||||
private JButton sendButton;
|
private JButton sendButton;
|
||||||
private JTabbedPane tabbedPane1;
|
private JTabbedPane tabbedPane1;
|
||||||
private JButton newTabButton;
|
private JButton newTabButton;
|
||||||
|
private JProgressBar progressBar1;
|
||||||
|
|
||||||
private ConfigurationProperties props;
|
private final ConfigurationProperties props;
|
||||||
|
private final HashMap<Integer, String> urls;
|
||||||
|
|
||||||
public MainWindow() {
|
public MainWindow() {
|
||||||
props = new ConfigurationProperties();
|
props = new ConfigurationProperties();
|
||||||
|
urls = new HashMap<>();
|
||||||
setContentPane(contentPane);
|
setContentPane(contentPane);
|
||||||
setMinimumSize(new Dimension(WIDTH, HEIGHT));
|
setMinimumSize(new Dimension(WIDTH, HEIGHT));
|
||||||
setSize(WIDTH, HEIGHT);
|
setSize(WIDTH, HEIGHT);
|
||||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
TabBuilder.create(tabbedPane1, "New request");
|
TabBuilder.create(tabbedPane1, "New request", urls);
|
||||||
|
Component tab = tabbedPane1.getSelectedComponent();
|
||||||
|
urls.put(tab.hashCode(), "");
|
||||||
newTabButton.addMouseListener(new MouseAdapter() {
|
newTabButton.addMouseListener(new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
super.mouseClicked(e);
|
super.mouseClicked(e);
|
||||||
TabBuilder.create(tabbedPane1, "New request");
|
TabBuilder.create(tabbedPane1, "New request", urls);
|
||||||
|
Component tab = tabbedPane1.getSelectedComponent();
|
||||||
|
urls.put(tab.hashCode(), "");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sendButton.addMouseListener(new MouseAdapter() {
|
sendButton.addMouseListener(new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
super.mouseClicked(e);
|
super.mouseClicked(e);
|
||||||
try {
|
if (!urlField.getText().isBlank()) {
|
||||||
sendRequest();
|
sendRequest();
|
||||||
} catch (IOException | NoSuchAlgorithmException | KeyManagementException ioException) {
|
} else {
|
||||||
ioException.printStackTrace();
|
MessageDialog.info("Url field empty", "Please enter an url");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
tabbedPane1.addChangeListener(new ChangeListener() {
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
if (tabbedPane1.getSelectedIndex() != -1) {
|
||||||
|
urlField.setText(urls.get(tabbedPane1.getSelectedComponent().hashCode()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
urlField.getDocument().addDocumentListener(new DocumentListener() {
|
||||||
|
public void changedUpdate(DocumentEvent e) {
|
||||||
|
warn();
|
||||||
|
}
|
||||||
|
public void removeUpdate(DocumentEvent e) {
|
||||||
|
warn();
|
||||||
|
}
|
||||||
|
public void insertUpdate(DocumentEvent e) {
|
||||||
|
warn();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void warn() {
|
||||||
|
if (tabbedPane1.getSelectedIndex() != -1) {
|
||||||
|
urls.put(tabbedPane1.getSelectedComponent().hashCode(), urlField.getText());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void centerFrame() {
|
private void sendRequest() {
|
||||||
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
|
|
||||||
int y = (int)( screen.getHeight() / 2 ) - this.getHeight() / 2;
|
|
||||||
int x = (int)( screen.getWidth() / 2 ) - this.getWidth() / 2;
|
|
||||||
this.setLocation(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendRequest() throws IOException, NoSuchAlgorithmException, KeyManagementException {
|
|
||||||
Optional<JSplitPane> possibleTab = getSelectedTab();
|
Optional<JSplitPane> possibleTab = getSelectedTab();
|
||||||
if (possibleTab.isPresent()) {
|
if (possibleTab.isPresent()) {
|
||||||
JSplitPane tab = possibleTab.get();
|
JSplitPane tab = possibleTab.get();
|
||||||
String url = textField1.getText();
|
int i = tabbedPane1.indexOfComponent(tab);
|
||||||
HttpClient h = new HttpClient(props);
|
JTextArea bodyField = TabBuilder.getResponseArea(i);
|
||||||
Request r = new RequestBuilder(url)
|
progressBar1.setVisible(true);
|
||||||
.build();
|
new Thread(() -> {
|
||||||
Optional<Response> possibleRes = h.get(r);
|
try {
|
||||||
if (possibleRes.isPresent()) {
|
String url = urlField.getText();
|
||||||
Response res = possibleRes.get();
|
HttpClient h = new HttpClient(props);
|
||||||
int i = tabbedPane1.indexOfComponent(tab);
|
Request r = new RequestBuilder(url)
|
||||||
JTextArea t = TabBuilder.getResponseArea(i);
|
.build();
|
||||||
t.setText(res.getBody());
|
Optional<Response> possibleRes = Optional.empty();
|
||||||
}
|
switch ((String) Objects.requireNonNull(methodBox.getSelectedItem())) {
|
||||||
}
|
case "GET" -> possibleRes = h.get(r);
|
||||||
|
case "POST" -> possibleRes = h.post(r, "");
|
||||||
|
case "PUT" -> possibleRes = h.put(r, "");
|
||||||
|
case "DELETE" -> possibleRes = h.delete(r);
|
||||||
|
case "HEAD" -> possibleRes = h.head(r);
|
||||||
|
}
|
||||||
|
if (possibleRes.isPresent()) {
|
||||||
|
Response res = possibleRes.get();
|
||||||
|
|
||||||
|
bodyField.setText(res.getBody());
|
||||||
|
}
|
||||||
|
} catch (KeyManagementException | IOException | NoSuchAlgorithmException e) {
|
||||||
|
bodyField.setText(e.getMessage());
|
||||||
|
} finally {
|
||||||
|
progressBar1.setVisible(false);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
} else {
|
||||||
|
MessageDialog.error("Error", "Cannot get current tab");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<JSplitPane> getSelectedTab() {
|
private Optional<JSplitPane> getSelectedTab() {
|
||||||
|
|||||||
@@ -1,21 +1,33 @@
|
|||||||
package ovh.alexisdelhaie.endpoint.builder;
|
package ovh.alexisdelhaie.endpoint.builder;
|
||||||
|
|
||||||
|
import ovh.alexisdelhaie.endpoint.utils.InsertToTableDialog;
|
||||||
|
import ovh.alexisdelhaie.endpoint.utils.KeyValuePair;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.ListSelectionEvent;
|
||||||
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
import javax.swing.table.DefaultTableModel;
|
||||||
import javax.swing.table.TableColumn;
|
import javax.swing.table.TableColumn;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.security.KeyManagementException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class TabBuilder {
|
public class TabBuilder {
|
||||||
|
|
||||||
private static HashMap<String, Component> indexes = new HashMap<>();
|
private static HashMap<String, Component> indexes = new HashMap<>();
|
||||||
|
|
||||||
public static void create(JTabbedPane tab, String label) {
|
public static void create(JTabbedPane tab, String label, HashMap<Integer, String> urls) {
|
||||||
Component c = tab.add("", buildMainPanel());
|
Component c = tab.add("", buildMainPanel());
|
||||||
int index = tab.indexOfComponent(c);
|
int index = tab.indexOfComponent(c);
|
||||||
updateIndexes(index);
|
updateIndexes(index);
|
||||||
tab.setTabComponentAt(index, buildTabPanel(tab, c, label));
|
tab.setTabComponentAt(index, buildTabPanel(tab, c, label, urls));
|
||||||
tab.setSelectedComponent(c);
|
tab.setSelectedComponent(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,7 +36,7 @@ public class TabBuilder {
|
|||||||
indexes.remove("main[waiting].responseTextArea");
|
indexes.remove("main[waiting].responseTextArea");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static JPanel buildTabPanel(JTabbedPane tab, Component c, String label) {
|
private static JPanel buildTabPanel(JTabbedPane tab, Component c, String label, HashMap<Integer, String> urls) {
|
||||||
JPanel p = new JPanel(new GridBagLayout());
|
JPanel p = new JPanel(new GridBagLayout());
|
||||||
p.setOpaque(false);
|
p.setOpaque(false);
|
||||||
JLabel l = new JLabel(label);
|
JLabel l = new JLabel(label);
|
||||||
@@ -35,11 +47,11 @@ public class TabBuilder {
|
|||||||
p.add(l, g);
|
p.add(l, g);
|
||||||
g.gridx++;
|
g.gridx++;
|
||||||
g.weightx = 0;
|
g.weightx = 0;
|
||||||
p.add(buildCloseButton(tab, c), g);
|
p.add(buildCloseButton(tab, c, urls), g);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static JButton buildCloseButton(JTabbedPane tab, Component c) {
|
private static JButton buildCloseButton(JTabbedPane tab, Component c, HashMap<Integer, String> urls) {
|
||||||
JButton b = new JButton("×");
|
JButton b = new JButton("×");
|
||||||
b.setBorderPainted(false);
|
b.setBorderPainted(false);
|
||||||
b.setFocusPainted(false);
|
b.setFocusPainted(false);
|
||||||
@@ -49,6 +61,7 @@ public class TabBuilder {
|
|||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
super.mouseClicked(e);
|
super.mouseClicked(e);
|
||||||
|
urls.remove(c.hashCode());
|
||||||
tab.remove(c);
|
tab.remove(c);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -70,9 +83,9 @@ public class TabBuilder {
|
|||||||
|
|
||||||
private static JTabbedPane buildParametersTabbedPane() {
|
private static JTabbedPane buildParametersTabbedPane() {
|
||||||
JTabbedPane p = new JTabbedPane();
|
JTabbedPane p = new JTabbedPane();
|
||||||
p.add("Params", buildTable());
|
p.add("Params", buildParamsTab());
|
||||||
p.add("Authorization", new JPanel());
|
p.add("Authorization", new JPanel());
|
||||||
p.add("Headers", buildTable());
|
p.add("Headers", buildParamsTab());
|
||||||
p.add("Body", new JTextArea());
|
p.add("Body", new JTextArea());
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
@@ -92,4 +105,54 @@ public class TabBuilder {
|
|||||||
return (JTextArea) indexes.get("main[" + index + "].responseTextArea");
|
return (JTextArea) indexes.get("main[" + index + "].responseTextArea");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static JPanel buildParamsTab() {
|
||||||
|
String[] headers = {"Keys", "Values"};
|
||||||
|
Object[][] datas = {};
|
||||||
|
DefaultTableModel model = new DefaultTableModel(datas, headers);
|
||||||
|
JPanel p = new JPanel();
|
||||||
|
JTable t = new JTable(model);
|
||||||
|
JButton addButton = new JButton("Add new parameter");
|
||||||
|
JButton delButton = new JButton("Delete parameter");
|
||||||
|
delButton.setEnabled(false);
|
||||||
|
t.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
|
||||||
|
public void valueChanged(ListSelectionEvent event) {
|
||||||
|
delButton.setEnabled(t.getSelectedRows().length > 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
addButton.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
super.mouseClicked(e);
|
||||||
|
Optional<KeyValuePair> result = InsertToTableDialog.showDialog("Enter value");
|
||||||
|
if (result.isPresent()) {
|
||||||
|
DefaultTableModel m = (DefaultTableModel) t.getModel();
|
||||||
|
m.addRow(new Object[]{result.get().getKey(), result.get().getValue()});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
delButton.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
super.mouseClicked(e);
|
||||||
|
int n = t.getSelectedRows().length;
|
||||||
|
if (n > 0) {
|
||||||
|
DefaultTableModel m = (DefaultTableModel) t.getModel();
|
||||||
|
for(int i = 0; i < n; i++) {
|
||||||
|
m.removeRow(t.getSelectedRow());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
p.add(addButton);
|
||||||
|
p.add(delButton);
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
JPanel pp = new JPanel();
|
||||||
|
pp.add(p);
|
||||||
|
JScrollPane sp = new JScrollPane(t);
|
||||||
|
pp.add(sp);
|
||||||
|
pp.setLayout(new BoxLayout(pp, BoxLayout.Y_AXIS));
|
||||||
|
return pp;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="ovh.alexisdelhaie.endpoint.utils.InsertToTableDialog">
|
||||||
|
<grid id="cbd77" binding="contentPane" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
|
<margin top="10" left="10" bottom="10" right="10"/>
|
||||||
|
<constraints>
|
||||||
|
<xy x="48" y="54" width="436" height="214"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children>
|
||||||
|
<grid id="94766" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
|
<margin top="0" left="0" bottom="0" right="0"/>
|
||||||
|
<constraints>
|
||||||
|
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children>
|
||||||
|
<hspacer id="98af6">
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</hspacer>
|
||||||
|
<grid id="9538f" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="true" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
|
<margin top="0" left="0" bottom="0" right="0"/>
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children>
|
||||||
|
<component id="e7465" class="javax.swing.JButton" binding="buttonOK">
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="OK"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="5723f" class="javax.swing.JButton" binding="buttonCancel">
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Cancel"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
<grid id="e3588" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
|
<margin top="0" left="0" bottom="0" right="0"/>
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children>
|
||||||
|
<component id="c8c26" class="javax.swing.JLabel" binding="message">
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<font size="24"/>
|
||||||
|
<text value="Label"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="b2442" class="javax.swing.JTextField" binding="keyField">
|
||||||
|
<constraints>
|
||||||
|
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
|
||||||
|
<preferred-size width="150" height="-1"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
</component>
|
||||||
|
<component id="2a539" class="javax.swing.JTextField" binding="valueField">
|
||||||
|
<constraints>
|
||||||
|
<grid row="2" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
|
||||||
|
<preferred-size width="150" height="-1"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
</component>
|
||||||
|
<component id="ae42e" class="javax.swing.JLabel">
|
||||||
|
<constraints>
|
||||||
|
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Key"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="481b3" class="javax.swing.JLabel">
|
||||||
|
<constraints>
|
||||||
|
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Value"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
</form>
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
package ovh.alexisdelhaie.endpoint.utils;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class InsertToTableDialog extends JDialog {
|
||||||
|
|
||||||
|
public static final int WIDTH = 325;
|
||||||
|
public static final int HEIGHT = 195;
|
||||||
|
|
||||||
|
private JPanel contentPane;
|
||||||
|
private JButton buttonOK;
|
||||||
|
private JButton buttonCancel;
|
||||||
|
private JTextField keyField;
|
||||||
|
private JTextField valueField;
|
||||||
|
private JLabel message;
|
||||||
|
|
||||||
|
private boolean accepted = false;
|
||||||
|
|
||||||
|
private InsertToTableDialog(String message) {
|
||||||
|
setTitle("Insert");
|
||||||
|
setContentPane(contentPane);
|
||||||
|
setModal(true);
|
||||||
|
getRootPane().setDefaultButton(buttonOK);
|
||||||
|
this.message.setText(message);
|
||||||
|
|
||||||
|
buttonOK.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
onOK();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonCancel.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
onCancel();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// call onCancel() when cross is clicked
|
||||||
|
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
|
||||||
|
addWindowListener(new WindowAdapter() {
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
onCancel();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// call onCancel() on ESCAPE
|
||||||
|
contentPane.registerKeyboardAction(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
onCancel();
|
||||||
|
}
|
||||||
|
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onOK() {
|
||||||
|
accepted = true;
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onCancel() {
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Optional<KeyValuePair> showDialog(String message) {
|
||||||
|
InsertToTableDialog dialog = new InsertToTableDialog(message);
|
||||||
|
dialog.setModal(true);
|
||||||
|
dialog.setMinimumSize(new Dimension(WIDTH, HEIGHT));
|
||||||
|
dialog.setMaximumSize(new Dimension(WIDTH, HEIGHT));
|
||||||
|
dialog.setResizable(false);
|
||||||
|
Tools.centerFrame(dialog);
|
||||||
|
dialog.setVisible(true);
|
||||||
|
if (dialog.accepted && !dialog.keyField.getText().isBlank()) {
|
||||||
|
return Optional.of(new KeyValuePair(dialog.keyField.getText(), dialog.valueField.getText()));
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package ovh.alexisdelhaie.endpoint.utils;
|
||||||
|
|
||||||
|
public class KeyValuePair {
|
||||||
|
|
||||||
|
private String key;
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public KeyValuePair(String key, String value) {
|
||||||
|
this.key = key;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
21
src/main/java/ovh/alexisdelhaie/endpoint/utils/Tools.java
Normal file
21
src/main/java/ovh/alexisdelhaie/endpoint/utils/Tools.java
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package ovh.alexisdelhaie.endpoint.utils;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class Tools {
|
||||||
|
|
||||||
|
public static Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
|
||||||
|
|
||||||
|
public static void centerFrame(Dialog dialog) {
|
||||||
|
int y = (int)( screen.getHeight() / 2 ) - dialog.getHeight() / 2;
|
||||||
|
int x = (int)( screen.getWidth() / 2 ) - dialog.getWidth() / 2;
|
||||||
|
dialog.setLocation(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void centerFrame(Frame frame) {
|
||||||
|
int y = (int)( screen.getHeight() / 2 ) - frame.getHeight() / 2;
|
||||||
|
int x = (int)( screen.getWidth() / 2 ) - frame.getWidth() / 2;
|
||||||
|
frame.setLocation(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user