printMaterial と setMaterial メソッドを持つ MaterialProperties というクラスで、ソリッド オブジェクトのマテリアル プロパティを印刷および設定するこのメソッドがあります。
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 のユーザー入力を取得する必要があります。私がする必要があるのは、利用可能なすべてのマテリアル タイプを表示して、ユーザーが必要なマテリアルを選択できるようにすることです。だから私は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();
}
}
}
ここでの問題は、ラジオ ボタンから選択した newMaterial 文字列を Btn3_callback() 関数で newMaterial に使用するにはどうすればよいかということです。クラス MyAction で newMaterial の getString() メソッドを作成し、それを Btn3_callback で使用すると、常に null が返されます。
これを行う方法はありますか?または、アイデアを実装できる別の方法はありますか?ありがとう