2

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 が返されます。

これを行う方法はありますか?または、アイデアを実装できる別の方法はありますか?ありがとう

4

1 に答える 1

4

JOptionPaneフレームの代わりにa を使用します。オプションのリスト ( JList..or JComboBox) をオプション ペインに配置し、返された (ペインが閉じられている) コンポーネントに対して、選択したオブジェクトをクエリします。

JComboBoxを使用したEG

GUI は EDT で作成および変更する必要があります (電池は含まれません)。

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 に答える