我试图构建一个程序,解析XML文件并使用XML属性生成GUI。它使用循环生成JButton并将其添加到GUI中,这样它就可以根据需要拥有任意多个按钮。当按下按钮时,GUI应该会刷新,显示新按钮。这是我到目前为止得到的:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextPane;
import javax.swing.JTextArea;
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
public class TextAdventureGUI extends JFrame implements ActionListener {
private JPanel contentPane;
/**
* @wbp.nonvisual location=-20,79
*/
private final JPanel panel = new JPanel();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
File inputFile = new File("input");
SAXBuilder saxB = new SAXBuilder();
Document doc = saxB.build(inputFile);
Element storyElement = doc.getRootElement();
List<Element> scenesList = storyElement.getChildren();
Element sceneElement = scenesList.get(1);
List<Element> choicesList = sceneElement.getChildren();
TextAdventureGUI frame = new TextAdventureGUI(sceneElement, choicesList);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TextAdventureGUI(Element scene, List<Element> choices) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 482, 311);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new GridLayout(5, 0));
//String buttonNames[] = {"choice1", "choice2", "choice3", "choice4", "choice5"};
JButton[] cButtons = new JButton[18];
for(int temp = 1; temp <= choices.size(); temp++)
{
Element choice = choices.get(temp);
//String bName = buttonNames[temp];
cButtons[temp] = new JButton(choice.getChildText("choiceDescription"));
cButtons[temp].addActionListener(this);
contentPane.add(cButtons[temp]);
}
JTextArea textArea = new JTextArea(scene.getChildText("sceneDescription"));
textArea.setBounds(5, 11, 451, 104);
contentPane.add(textArea);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
这是我正在解析的XML:
<?xml version = "1.0"?>
<Story>
<Scene id = "scene1">
<SceneDescription>Insert Scene Description
</SceneDescription>
<choice no="1">
<choiceDescription>choice description 1 </choiceDescription>
<outcome>end1</outcome>
</choice>
<choice no="2">
<choiceDescription>choice description 2 </choiceDescription>
<outcome>scene3</outcome>
</choice>
</Scene>
<Scene id = "scene2">
<SceneDescription>This is the scene to parse
</SceneDescription>
<choice no="1">
<choiceDescription>choice description 1 </choiceDescription>
<outcome>scene1</outcome>
</choice>
<choice no="2">
<choiceDescription>choice description 2 </choiceDescription>
<outcome>scene3</outcome>
</choice>
</Scene>
<Scene id = "scene3">
<SceneDescription>Insert Scene Description
</SceneDescription>
<choice no="1">
<choiceDescription>choice description 1 </choiceDescription>
<outcome>end1</outcome>
</choice>
<choice no="2">
<choiceDescription>choice description 2 </choiceDescription>
<outcome>scene1</outcome>
</choice>
</Scene>
<Scene id = "end1">
<SceneDescription>ending
</SceneDescription>
</Scene>
</Story>
我不知道从这里去哪里,我不想有另一个循环在第一个循环中制作新按钮,但我想不出一种方法来构建第二个循环,它自己仍然保持我的变量在范围内,或者理想地重新使用同一个循环来显示新按钮,如果有人比我更好地理解GUI构建,可以给我一些关于如何使这项工作的建议,我将不胜感激。
我已经将其更改为使用JList而不是修复问题的JButton
这款应用目前以黑色背景开始。我想要一个在黑色背景上写着“警告可能会导致癫痫发作”的标签,一旦屏幕被按下,标签就会消失。这真的很简单,但我是新手
问题内容: 在执行do-while循环时,让JButton重复更新(与计时器一起使用)时遇到了一些麻烦。我正在开发一个简单的游戏,在10 * 10的图块对象网格上玩,该对象对应于具有100个按钮的JButton arrayList。 程序的此部分处理简单的寻路(即,如果我单击角色,然后单击一个空的图块,则角色将在到达目标的途中在每个图块中移动)。每个步骤之间都有一定的延迟,因此用户可以看到角色的进
我在php中工作,现在我正在将时循环应用于我的代码。我正在从数据库中获取数据。现在我必须将该数据应用于页面中的一个Div。 我的问题是"div类="项目活动"在循环中每次活动类都需要。现在我想改变它,就像在第一个循环过程之后,当第二个开始时,我想把那个div改变成这个"div类="项目"。 我对这个循环过程不太熟悉,所以我无法解决这个问题。需要帮助。谢谢
如何显示一个计数器从1到2到3再到n的按钮点击。我尝试在for循环中执行setState,但不起作用。我知道React的setState是异步的,我甚至尝试过使用prevState,但它不起作用。 https://www.webpackbin.com/bins/-kku1nja-ectflydgf_s 我想把计数从0增加到n,作为点击时的定时器。
} 完整错误消息:
问题内容: 我正在用Java开发游戏,面临以下挑战。 我有2个,需要在视觉上将形状从一个拖动到另一个。我有使用这个工作从。当我按下鼠标拖动形状时,激活该形状并将其转移到glassPane。因此,您需要将状态从转移到。我通过使用Robot类解决了这个问题,该类模拟了glassPane被激活后的另一个事件。 现在出现了问题,此解决方法仅在Windows上有效,而不适用于mac osx,在osx上,只要