2

我有这种方法可以在名为 MaterialProperties 的类中打印和设置实体对象的材料属性,该类具有 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 的用户输入,而不是对其进行硬编码。我需要做的是显示所有可用的材料类型,以便用户可以选择所需的材料。所以我尝试使用 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;

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

4

1 回答 1

4

使用 aJOptionPane代替框架。将选项列表 ( JList..or JComboBox) 放在选项窗格中,并在返回后查询组件(窗格已关闭),以获取所选对象。

EG 使用 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());
        }
    }
}
于 2012-07-24T00:33:04.153 回答