最近我一直在转换一个python脚本,我制作了它来编辑在游戏中用作关卡的XML文件,到java,我发现了一个问题。我想让用户设置要编辑的XML文件的路径,因为有很多他们可能想要编辑的文件,但是我的代码工作的方式我不知道该怎么做
我已经把我的全部代码下面
import javax.swing.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.awt.*;
import java.io.File;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class mapEdit {
public static void main(String[] args) {
try {
String filePath = "B:/SteamLibrary/steamapps/common/Tasty Planet/assets/levels/bacteria.xml";
File file = new File(filePath);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
Element root = doc.getDocumentElement();
JFrame frame = new JFrame("Map Size Editor");
JPanel heightPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
heightPanel.add(new JLabel("Rows of tiles to add (height)"));
heightPanel.add(new JTextField(10));
JPanel widthPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
widthPanel.add(new JLabel("Rows of tiles to add (width)"));
widthPanel.add(new JTextField(10));
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
JButton setSizeButton = new JButton("Set Size");
setSizeButton.addActionListener(e -> {
System.out.println("you entered " + ((JTextField) heightPanel.getComponent(1)).getText());
float height = Float.parseFloat(root.getAttribute("height"))
+ (Integer.parseInt(((JTextField) heightPanel.getComponent(1)).getText()) * 256);
float width = Float.parseFloat(root.getAttribute("width"))
+ (Integer.parseInt(((JTextField) widthPanel.getComponent(1)).getText()) * 256);
System.out.println("height was: " + root.getAttribute("height"));
root.setAttribute("height", String.valueOf(height));
System.out.println("height is: " + root.getAttribute("height"));
System.out.println("width was: " + root.getAttribute("width"));
root.setAttribute("width", String.valueOf(width));
System.out.println("width is: " + root.getAttribute("width"));
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(file);
transformer.transform(source, result);
JOptionPane.showMessageDialog(frame, "Changes were successful.");
} catch (Exception ex) {
ex.printStackTrace();
}
});
buttonPanel.add(setSizeButton);
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
contentPanel.add(heightPanel);
contentPanel.add(widthPanel);
contentPanel.add(buttonPanel);
frame.setContentPane(contentPanel);
frame.setMinimumSize(new Dimension(400, 200));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
我曾尝试向GUI添加按钮和文本输入,并使用它们设置filePath
变量,但没有成功
1条答案
按热度按时间cbjzeqam1#