【Java】通过读取XML配置,创建一个GUI界面
XML配置文件如下:
- 在项目根目录创建XML文件,名字为“ui.xml”

- 用记事本打开,修改其内容如下并保存:
<?xml version="1.0"?>
<frame name="GUI界面测试" center="true" visible="true" resizable="true" alwaysOnTop="true" close="true" left="0" top="0" width="1000" height="618">
<panel index = "0" visible="true" Layout = "BorderLayout">
<button index = "0" enable="true" name="Intel" left="20" top="100" width="80" height="20" position = "North"/>
<button index = "1" enable="true" name="Microsoft" left="100" top="100" width="80" height="20" position="South"/>
<button index = "2" enable="true" name="AMD" left="100" top="100" width="80" height="20" position="East"/>
<button index = "3" enable="true" name="NVIDIA" position="West"/>
<button index = "4" enable="true" name="Java" position="Center"/>
</panel>
</frame>
以下是Java代码:
package guiXML;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class XML_GUI {
private Document doc;
static public void main(String[]args){
new XML_GUI();
}
private XML_GUI(){
this.theJFrame();
}
private Document parseXML (String fileName){
doc = new Document();
SAXBuilder bSAX = new SAXBuilder(false);
try {
doc = bSAX.build(new File(fileName));
}
catch (JDOMException | IOException e) {
e.printStackTrace();
}
return doc;
}
private JFrame createJFrame(boolean center, boolean visible, boolean resizable, boolean alwaysOnTop, boolean close, int left, int top, int width, int height, String name) {
JFrame jFrame = new JFrame(name);
if(center) {
Toolkit theKit = jFrame.getToolkit();
Dimension wndSize = theKit.getScreenSize();
jFrame.setBounds(wndSize.width/2-width/2,wndSize.height/2-height/2,width,height);
}
else {
jFrame.setBounds(left,top,width,height);
}
jFrame.setVisible(visible);
jFrame.setResizable(resizable);
jFrame.setAlwaysOnTop(alwaysOnTop);
if(close) {
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
return jFrame;
}
private JPanel createJPanel(boolean visible, String Layout){
JPanel jPanel = new JPanel();
jPanel.setVisible(visible);
if(0 == Layout.compareTo("BorderLayout")){
jPanel.setLayout(new BorderLayout());
}
jPanel.setBackground(Color.green);
return jPanel;
}
private JButton createJButton(boolean enable, String name){
JButton jButton = new JButton(name);
jButton.setEnabled(enable);
jButton.addActionListener(e -> System.out.println("The button you click is "+name+'.'));
return jButton;
}
private void theJFrame() {
addJFrame().revalidate();
}
private JFrame addJFrame(){
doc = parseXML("ui.xml");
Element root = doc.getRootElement();
List panelList = root.getChildren("panel");
JFrame jFrame= createJFrame(
Boolean.parseBoolean(root.getAttribute("center").getValue().trim()),
Boolean.parseBoolean(root.getAttribute("visible").getValue().trim()),
Boolean.parseBoolean(root.getAttribute("resizable").getValue().trim()),
Boolean.parseBoolean(root.getAttribute("alwaysOnTop").getValue().trim()),
Boolean.parseBoolean(root.getAttribute("close").getValue().trim()),
Integer.parseInt(root.getAttribute("left").getValue().trim()),
Integer.parseInt(root.getAttribute("top").getValue().trim()),
Integer.parseInt(root.getAttribute("width").getValue().trim()),
Integer.parseInt(root.getAttribute("height").getValue().trim()),
root.getAttribute("name").getValue().trim());
for (int i=0; i < panelList.size() ; i++) {
jFrame.add(addJPanel(panelList,i));
}
return jFrame;
}
private JPanel addJPanel( List panelList,int i){
Element element = (Element)panelList.get(i);
List buttonList = element.getChildren("button");
JPanel jPanel = createJPanel(Boolean.parseBoolean(element.getAttribute("visible").getValue().trim()),
element.getAttribute("Layout").getValue().trim());
for(int j = 0;j<buttonList.size();j++) {
Element element_but = (Element)buttonList.get(j);
jPanel.add(element_but.getAttribute("position").getValue().trim(),addJButton(buttonList,j));
}
return jPanel;
}
private JButton addJButton(List buttonList,int j){
Element element = (Element) buttonList.get(j);
return createJButton(Boolean.parseBoolean(
element.getAttribute("enable").getValue().trim()),
element.getAttribute("name").getValue());
}
}