Java 如何创建按钮并根据用户输入在面板上定位
在第一帧中,我有一个带有表单布局的面板,我有一个“添加”按钮。当用户单击“添加”按钮时,将显示第二帧。第二个框架允许用户填写在a.java中创建按钮所需的信息 在A.java的框架上添加按钮:Java 如何创建按钮并根据用户输入在面板上定位,java,eclipse,jbutton,form-layout,Java,Eclipse,Jbutton,Form Layout,在第一帧中,我有一个带有表单布局的面板,我有一个“添加”按钮。当用户单击“添加”按钮时,将显示第二帧。第二个框架允许用户填写在a.java中创建按钮所需的信息 在A.java的框架上添加按钮: JButton button_3 = new JButton("ADD");//ADD ROW button_3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e)
JButton button_3 = new JButton("ADD");//ADD ROW
button_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
addCHECKUP addC = new addCHECKUP();//note that addCHECKUP is B.java
addC.setVisible(true);
addC.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
});
A.java的框架:
JButton button_3 = new JButton("ADD");//ADD ROW
button_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
addCHECKUP addC = new addCHECKUP();//note that addCHECKUP is B.java
addC.setVisible(true);
addC.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
});
如果用户单击A.java的框架处的添加按钮,将显示B.java的框架
B.java的框架:
在用户完成在B.java的框架中提供所有输入后,将单击ADD按钮。然后,根据用户在B.java框架上的输入,在a.java框架上创建一个新按钮
到目前为止,当点击B.java框架上的ADD按钮时,信息被保存到一个文本文件中。下面是添加按钮代码
JButton btnAdd = new JButton("ADD");
btnAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println(comboBox_1.getSelectedItem()); //getActivity
if (chckbxNewCheckBox.isSelected()){//if complication
System.out.println("*"+textField.getText());//setTaskName have * sign
}
else{
System.out.println(textField.getText());
}
System.out.println(comboBox.getSelectedItem()); //getDay
String filename = "c:" + File.separator + "Text File from B.java Class.txt";
File f = new File(filename);
PrintWriter pw = null;
try {
pw = new PrintWriter(f);
pw.println(comboBox_1.getSelectedItem());
if (chckbxNewCheckBox.isSelected()){//if complication
pw.println("*"+textField.getText());
}
else{
pw.println(textField.getText());
}
pw.println(comboBox.getSelectedItem());
pw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
if(pw!=null){
pw.close();
}
}
JOptionPane.showMessageDialog(null,"Successfully added !");
}
});
现在,我打算访问文本文件,并根据文本文件中的信息创建一个新按钮。我不知道如何根据文本文件中的信息制作新按钮。如果有其他更简单的方法,请告诉我
我想创建这样的按钮:我把它放在B.java
JButton btn_34 = new JButton("Uptitrate BB");//Task Name
BigPanel.add(btn_34, "12, 11"); //12 and 11 is based on Activity and Day
但BigPanel中出现错误。添加我将使用属性读写此内容 因此,您只需要键和值
final Properties prop = new Properties();
prop.setProperty("Activity", comboBox_1.getSelectedItem());
prop.setProperty("Complication", chckbxNewCheckBox.isSelected());
prop.setProperty("Day", comboBox.getSelectedItem());
writePropertyIntoFile("c:" + File.separator + "Text File from B.java Class.txt", prop);
您的写入方法可能如下所示
private static void writePropertyIntoFile(String file, final Properties prop)
throws FileNotFoundException, IOException {
try (final FileOutputStream f = new FileOutputStream(file);) {
prop.store(f, null);
}
}
诚恳
更新-1
我假设我有一个包含
B1.Day,1
B1.Complication,true
B1.Activity,Diagnose
B2.Day,2
B2.Complication,false
B2.Activity,Labs
B3.Day,5
B3.Complication,false
B3.Activity,Oxygon
现在,我只需要为这个属性文件中包含的每个内容在所有Bs上循环调用createButton。我所能保存的只是最后使用的索引。因此,如果用户添加一个新的。我们创建了一个新的按钮Bn。将此保存到文件中,即可完成
更新-2
JButton button_3 = new JButton("ADD");//ADD ROW
button_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String btName = getNextFreeButtonName();
Button btnX = createNewButton("Oxy", "11","10", btName);
mapContainingAllButtons.put(btName, btnX)
addButtonToFram(btnX);
}
});
每当你点击“添加”按钮时,你就会遇到另一个问题,那就是你要重写同一个文件。为什么不使用数据库?@Blip我不使用数据库,因为这只是一个原型,而不是真正的软件。。我不知道如何连接用户输入和创建新按钮。另外,这个项目使用2个类,我不知道如何连接A.java和B.java类。你能发布框架A.java的actionlistner,显示它是如何初始化和调用框架B.java的吗?@Blip很抱歉给你带来不便,我刚刚编辑了它,我建议您对B.java使用
JDialog
而不是JFrame
。通过这种方式,您可以从B.java返回结果,并在B.java显示时使A.java不可编辑。感谢您的回答,但我的主要问题是根据用户输入创建一个新按钮,即活动(行)、日期(列)、任务名称(按钮名称)和复杂度(在任务名称处放置*符号或不标记)。你知道如何连接新的JButton和属性吗?你需要每个按钮的属性吗?当然,因为要创建一个新按钮,我必须设置按钮的名称和位置(行活动和列日),实际上你可以为所有按钮使用一个属性文件。您只需要在键中添加前缀,如“B1.Day”,然后就可以访问所有属性。您能告诉我如何使用属性创建新按钮吗?