gpt4 book ai didi

java - 需要从 JFrame 获取输入并在不同的类中使用它(Pro-Engineer 的 J-link 应用程序)

转载 作者:行者123 更新时间:2023-11-30 07:24:08 25 4
gpt4 key购买 nike

我有这种方法可以在名为 MaterialProperties 的类中打印和设置实体对象的 Material 属性,该类具有 printMaterial 和 setMaterial 方法。

public void Btn3_callback ( ) throws Exception {
Model model = session.GetCurrentModel();

if (model == null) {
mesg = "No Model Selected!!";
//TextField.Area("No Model Selected!!");
System.exit(0);
}
else {
Solid solid= (Solid) model;
String newMaterial="copper";//user input for new Material name
printMaterial(solid);//printMaterial print the Material properties of the Solid object
setMaterial(solid,newMaterial);//setMaterial sets the Material properties of the Solid object to the material entered
}
}

我需要为 newMaterial 获取用户输入,而不是对其进行硬编码。我需要做的是显示所有可用的 Material 类型,以便用户可以选择所需的 Material 。所以我尝试使用 JFrame 来做到这一点。这是我的代码:

public class MaterialWindow {

JFrame frame = new JFrame("Material Selection");
public MaterialWindow(){
// Directory path here
String path = "W:\\materials";

JFrame frame = new JFrame("Material Selection");
JPanel panel = new JPanel(new GridLayout(0, 4));
ButtonGroup bg = new ButtonGroup();

String files;
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
JRadioButton button;

for (int i = 0; i < listOfFiles.length; i++)
{

if (listOfFiles[i].isFile())
{
files = listOfFiles[i].getName();
if (files.endsWith(".mtl") || files.endsWith(".MTL"))
{

button = new JRadioButton(files);
panel.add(first,BorderLayout.CENTER);
panel.revalidate();

bg.add(button);

first.addActionListener(new MyAction());


}
}
}

frame.add(panel, BorderLayout.NORTH);
frame.getContentPane().add(new JScrollPane(panel), BorderLayout.CENTER);
frame.setSize(1000, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}



public class MyAction implements ActionListener{

public void actionPerformed(ActionEvent e){

String newMaterial =e.getActionCommand();
String[] split = newMaterial.split("\\.");
newMaterial = split[0];
newMaterial.trim();
//set the newMaterial for btn3_callback OR call the setMaterial method of MaterialPropeties class
frame.dispose();
}

}


}

现在的问题是如何在我的 Btn3_callback() 函数中使用从单选按钮选择的 newMaterial 字符串到 newMaterial?当我在 MyAction 类中为 newMaterial 创建一个 getString() 方法并使用它 Btn3_callback 时,它总是返回 null;

有什么办法可以做到这一点吗?或者我可以用任何不同的方式来实现这个想法?谢谢

最佳答案

使用 JOptionPane 代替框架。将选项列表(JList .. 或 JComboBox)放入选项 Pane 中,并在组件返回( Pane 关闭)后查询所选对象的组件。

例如使用 JComboBox

应在 EDT 上创建和更改 GUI(不包括电池)。

import java.io.File;
import javax.swing.*;

public class QuickTest {

public static void main(String[] args) throws Exception {
File[] files = new File(System.getProperty("user.home")).listFiles();
JFrame f = new JFrame("Faux J-Link");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JEditorPane jep = new JEditorPane();
f.add(new JScrollPane(jep));
f.setSize(600,400);
f.setLocationByPlatform(true);
f.setVisible(true);

JComboBox choices = new JComboBox(files);
int result = JOptionPane.showConfirmDialog(f, choices);
if (result==JOptionPane.OK_OPTION) {
System.out.println("OK");
File file = files[choices.getSelectedIndex()];
jep.setPage(file.toURI().toURL());
}
}
}

关于java - 需要从 JFrame 获取输入并在不同的类中使用它(Pro-Engineer 的 J-link 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com