diff --git a/src/main/java/com/luoboduner/moo/info/App.java b/src/main/java/com/luoboduner/moo/info/App.java
index f2e1c1c..aa400f3 100644
--- a/src/main/java/com/luoboduner/moo/info/App.java
+++ b/src/main/java/com/luoboduner/moo/info/App.java
@@ -23,7 +23,7 @@ public class App {
public static MainFrame mainFrame;
- public static oshi.SystemInfo si = new oshi.SystemInfo();
+ public static oshi.SystemInfo si;
public static void main(String[] args) {
@@ -52,6 +52,9 @@ public class App {
UpgradeUtil.smoothUpgrade();
mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
+
+ si = new oshi.SystemInfo();
+
Init.initGlobalFont();
mainFrame.setContentPane(MainWindow.getInstance().getMainPanel());
MainWindow.getInstance().init();
diff --git a/src/main/java/com/luoboduner/moo/info/ui/Init.java b/src/main/java/com/luoboduner/moo/info/ui/Init.java
index 1b1ebaf..ab7e140 100644
--- a/src/main/java/com/luoboduner/moo/info/ui/Init.java
+++ b/src/main/java/com/luoboduner/moo/info/ui/Init.java
@@ -7,6 +7,7 @@ import com.formdev.flatlaf.FlatLightLaf;
import com.formdev.flatlaf.IntelliJTheme;
import com.luoboduner.moo.info.App;
import com.luoboduner.moo.info.ui.component.TopMenuBar;
+import com.luoboduner.moo.info.ui.form.NetworkForm;
import com.luoboduner.moo.info.ui.form.OverviewForm;
import com.luoboduner.moo.info.util.SystemUtil;
import com.luoboduner.moo.info.util.UIUtil;
@@ -201,6 +202,7 @@ public class Init {
public static void initAllTab() {
ThreadUtil.execute(OverviewForm::init);
+ ThreadUtil.execute(NetworkForm::init);
// Check the new version
if (App.config.isAutoCheckUpdate()) {
diff --git a/src/main/java/com/luoboduner/moo/info/ui/form/MainWindow.form b/src/main/java/com/luoboduner/moo/info/ui/form/MainWindow.form
index 336a723..ed4891c 100644
--- a/src/main/java/com/luoboduner/moo/info/ui/form/MainWindow.form
+++ b/src/main/java/com/luoboduner/moo/info/ui/form/MainWindow.form
@@ -64,7 +64,7 @@
-
+
diff --git a/src/main/java/com/luoboduner/moo/info/ui/form/MainWindow.java b/src/main/java/com/luoboduner/moo/info/ui/form/MainWindow.java
index f6e915a..4300b21 100644
--- a/src/main/java/com/luoboduner/moo/info/ui/form/MainWindow.java
+++ b/src/main/java/com/luoboduner/moo/info/ui/form/MainWindow.java
@@ -18,6 +18,7 @@ public class MainWindow {
private JTabbedPane tabbedPane;
private JPanel mainPanel;
private JPanel overviewPanel;
+ private JPanel networkPanel;
private static MainWindow mainWindow;
@@ -36,6 +37,7 @@ public class MainWindow {
public void init() {
mainWindow = getInstance();
mainWindow.getOverviewPanel().add(OverviewForm.getInstance().getMainPanel(), gridConstraints);
+ mainWindow.getNetworkPanel().add(NetworkForm.getInstance().getMainPanel(), gridConstraints);
mainWindow.getMainPanel().updateUI();
}
@@ -74,18 +76,18 @@ public class MainWindow {
final JPanel panel4 = new JPanel();
panel4.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
tabbedPane.addTab("Disk", panel4);
+ networkPanel = new JPanel();
+ networkPanel.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+ tabbedPane.addTab("Network", networkPanel);
final JPanel panel5 = new JPanel();
panel5.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
- tabbedPane.addTab("Network", panel5);
+ tabbedPane.addTab("Variables", panel5);
final JPanel panel6 = new JPanel();
panel6.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
- tabbedPane.addTab("Variables", panel6);
+ tabbedPane.addTab("Processes", panel6);
final JPanel panel7 = new JPanel();
panel7.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
- tabbedPane.addTab("Processes", panel7);
- final JPanel panel8 = new JPanel();
- panel8.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
- tabbedPane.addTab("USB Devices", panel8);
+ tabbedPane.addTab("USB Devices", panel7);
}
/**
diff --git a/src/main/java/com/luoboduner/moo/info/ui/form/NetworkForm.form b/src/main/java/com/luoboduner/moo/info/ui/form/NetworkForm.form
new file mode 100644
index 0000000..84c1783
--- /dev/null
+++ b/src/main/java/com/luoboduner/moo/info/ui/form/NetworkForm.form
@@ -0,0 +1,54 @@
+
+
diff --git a/src/main/java/com/luoboduner/moo/info/ui/form/NetworkForm.java b/src/main/java/com/luoboduner/moo/info/ui/form/NetworkForm.java
new file mode 100644
index 0000000..0c4c9b0
--- /dev/null
+++ b/src/main/java/com/luoboduner/moo/info/ui/form/NetworkForm.java
@@ -0,0 +1,193 @@
+package com.luoboduner.moo.info.ui.form;
+
+import cn.hutool.log.Log;
+import cn.hutool.log.LogFactory;
+import com.intellij.uiDesigner.core.GridConstraints;
+import com.intellij.uiDesigner.core.GridLayoutManager;
+import com.luoboduner.moo.info.App;
+import lombok.Getter;
+import oshi.hardware.NetworkIF;
+import oshi.software.os.NetworkParams;
+import oshi.software.os.OperatingSystem;
+import oshi.util.Constants;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * OverviewForm
+ *
+ * @author RememBerBer
+ * @since 2021/11/12.
+ */
+@Getter
+public class NetworkForm {
+ private JPanel mainPanel;
+ private JTable interfacesTable;
+ private JPanel paramatersPanel;
+ private JTextPane parametersTextPane;
+
+ private static final int INIT_HASH_SIZE = 100;
+ private static final String IP_ADDRESS_SEPARATOR = "; ";
+ private static final String[] COLUMNS = {"Name", "Index", "Speed", "IPv4 Address", "IPv6 address", "MAC address"};
+ private static final double[] COLUMN_WIDTH_PERCENT = {0.02, 0.02, 0.1, 0.25, 0.45, 0.15};
+
+ private static final Log logger = LogFactory.get();
+
+ private static NetworkForm networkForm;
+
+ public static NetworkForm getInstance() {
+ if (networkForm == null) {
+ networkForm = new NetworkForm();
+ }
+ return networkForm;
+ }
+
+ public static void init() {
+ networkForm = getInstance();
+
+ initUi();
+ initInfo();
+ }
+
+ private static void initUi() {
+ }
+
+ private static void initInfo() {
+ initParameters();
+ initInterfaces();
+ }
+
+ private static void initInterfaces() {
+ JTable interfacesTable = getInstance().getInterfacesTable();
+
+ List networkIfList = App.si.getHardware().getNetworkIFs(true);
+
+ TableModel model = new DefaultTableModel(parseInterfaces(networkIfList), COLUMNS);
+ interfacesTable.setModel(model);
+ resizeColumns(interfacesTable.getColumnModel());
+ interfacesTable.setShowGrid(true);
+ }
+
+ private static void initParameters() {
+ JTextPane parametersTextPane = networkForm.getParametersTextPane();
+ parametersTextPane.setContentType("text/plain; charset=utf-8");
+ parametersTextPane.setEditable(false);
+
+ parametersTextPane.setText(buildParamsText(App.si.getOperatingSystem()));
+ }
+
+ private static String buildParamsText(OperatingSystem os) {
+ NetworkParams params = os.getNetworkParams();
+ StringBuilder sb = new StringBuilder("Host Name: ").append(params.getHostName());
+ if (!params.getDomainName().isEmpty()) {
+ sb.append("\nDomain Name: ").append(params.getDomainName());
+ }
+ sb.append("\nIPv4 Default Gateway: ").append(params.getIpv4DefaultGateway());
+ if (!params.getIpv6DefaultGateway().isEmpty()) {
+ sb.append("\nIPv6 Default Gateway: ").append(params.getIpv6DefaultGateway());
+ }
+ sb.append("\nDNS Servers: ").append(getIPAddressesString(params.getDnsServers()));
+ return sb.toString();
+ }
+
+ private static String getIPAddressesString(String[] ipAddressArr) {
+ StringBuilder sb = new StringBuilder();
+ boolean first = true;
+
+ for (String ipAddress : ipAddressArr) {
+ if (first) {
+ first = false;
+ } else {
+ sb.append(IP_ADDRESS_SEPARATOR);
+ }
+ sb.append(ipAddress);
+ }
+
+ return sb.toString();
+ }
+
+ private static Object[][] parseInterfaces(List list) {
+ Map intfSortValueMap = new HashMap<>(INIT_HASH_SIZE);
+ for (NetworkIF intf : list) {
+ intfSortValueMap.put(intf, intf.getIndex());
+ }
+ List> intfList = new ArrayList<>(intfSortValueMap.entrySet());
+ intfList.sort(Map.Entry.comparingByValue());
+
+ int i = 0;
+ Object[][] intfArr = new Object[intfList.size()][COLUMNS.length];
+
+ for (Map.Entry e : intfList) {
+ NetworkIF intf = e.getKey();
+
+ intfArr[i][0] = intf.getName();
+ intfArr[i][1] = intf.getIndex();
+ intfArr[i][2] = intf.getSpeed();
+ intfArr[i][3] = getIPAddressesString(intf.getIPv4addr());
+ intfArr[i][4] = getIPAddressesString(intf.getIPv6addr());
+ intfArr[i][5] = Constants.UNKNOWN.equals(intf.getMacaddr()) ? "" : intf.getMacaddr();
+
+ i++;
+ }
+
+ return intfArr;
+ }
+
+ private static void resizeColumns(TableColumnModel tableColumnModel) {
+ TableColumn column;
+ int tW = tableColumnModel.getTotalColumnWidth();
+ int cantCols = tableColumnModel.getColumnCount();
+ for (int i = 0; i < cantCols; i++) {
+ column = tableColumnModel.getColumn(i);
+ int pWidth = (int) Math.round(COLUMN_WIDTH_PERCENT[i] * tW);
+ column.setPreferredWidth(pWidth);
+ }
+ }
+
+ {
+// GUI initializer generated by IntelliJ IDEA GUI Designer
+// >>> IMPORTANT!! <<<
+// DO NOT EDIT OR ADD ANY CODE HERE!
+ $$$setupUI$$$();
+ }
+
+ /**
+ * Method generated by IntelliJ IDEA GUI Designer
+ * >>> IMPORTANT!! <<<
+ * DO NOT edit this method OR call it in your code!
+ *
+ * @noinspection ALL
+ */
+ private void $$$setupUI$$$() {
+ mainPanel = new JPanel();
+ mainPanel.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+ final JPanel panel1 = new JPanel();
+ panel1.setLayout(new GridLayoutManager(2, 1, new Insets(10, 10, 10, 10), -1, -1));
+ mainPanel.add(panel1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ paramatersPanel = new JPanel();
+ paramatersPanel.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+ panel1.add(paramatersPanel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ parametersTextPane = new JTextPane();
+ paramatersPanel.add(parametersTextPane, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(150, 50), null, 0, false));
+ final JScrollPane scrollPane1 = new JScrollPane();
+ panel1.add(scrollPane1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+ interfacesTable = new JTable();
+ scrollPane1.setViewportView(interfacesTable);
+ }
+
+ /**
+ * @noinspection ALL
+ */
+ public JComponent $$$getRootComponent$$$() {
+ return mainPanel;
+ }
+}
diff --git a/src/main/java/com/luoboduner/moo/info/ui/frame/MainFrame.java b/src/main/java/com/luoboduner/moo/info/ui/frame/MainFrame.java
index 261a5f6..93aca87 100644
--- a/src/main/java/com/luoboduner/moo/info/ui/frame/MainFrame.java
+++ b/src/main/java/com/luoboduner/moo/info/ui/frame/MainFrame.java
@@ -24,7 +24,7 @@ public class MainFrame extends JFrame {
TopMenuBar topMenuBar = TopMenuBar.getInstance();
topMenuBar.init();
setJMenuBar(topMenuBar);
- ComponentUtil.setPreferSizeAndLocateToCenter(this, 0.6, 0.66);
+ ComponentUtil.setPreferSizeAndLocateToCenter(this, 0.6, 0.68);
}
/**