2015-11-08 2 views
0

Я создаю библиотеку для своих учеников, чтобы создать простой графический интерфейс в Java, , но если они нажмут кнопку в интерфейсе, он должен запустить созданный ими метод.
Есть ли способ сделать это? Я не очень люблю Java, но учебная программа хочет, чтобы я :(Java: access user Сгенерированный код из библиотеки

+0

Какой код у вас есть? – hotzst

+0

Вы пытаетесь создать редактор Java? Если да, то почему? – Pshemo

+0

У меня есть кнопки TextFields, Labels и ActionListener, который запускает методы. – battler3d

ответ

0

Вы можете использовать отражение для запуска своего класса, не требуя, чтобы они реализовали интерфейс, хотя вам все равно придется предоставлять инструкции для ограничения типов аргументов. . только для методов без каких-либо аргументов

java.awt.EventQueue.invokeLater(() -> { 
    JFrame frm = new JFrame(); 
    JPanel pnl = new JPanel(); 
    frm.add(pnl); 
    pnl.setLayout(new BoxLayout(pnl, BoxLayout.Y_AXIS)); 
    pnl.add(new JLabel("Class")); 
    JTextField classField = new JTextField(); 
    pnl.add(classField); 
    pnl.add(new JLabel("Method")); 
    JTextField methodField = new JTextField(); 
    pnl.add(methodField); 
    JTextArea area = new JTextArea(); 
    area.setPreferredSize(new Dimension(300, 300)); 
    JButton btn = new JButton("Run"); 
    pnl.add(btn); 
    pnl.add(area); 
    System.setOut(new PrintStream(new OutputStream() { 
     @Override 
     public void write(int b) throws IOException { 
      area.append(new String(new byte[]{(byte) b})); 
     } 
    })); 
    btn.addActionListener(e -> { 
     try { 
      Class cls = Class.forName(classField.getText()); 
      Method m = null; 
      Method ma[] = cls.getDeclaredMethods(); 
      String methodName = methodField.getText().trim(); 
      m = cls.getMethod(methodName,new Class[]{}); 
      Object o = cls.newInstance(); 
      Object mr = m.invoke(o); 
      if(null != mr) { 
       area.append("\nreturned "+mr.toString()+"\n"); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      area.append("\nException "+ex.getMessage()+"\n"); 
     } 
    }); 
    frm.pack(); 
    frm.setVisible(true); 
}); 

данный класс, как:

public class StudentClass { 
    public void print10() { 
     int sum= 0; 
     for(int i = 0; i< 10; i++) { 
      System.out.println("i = "+i); 
      sum+=i; 
     } 
    } 
} 

будут нужны поля должны быть заполнены StudentClass и print10 и скомпилированных CLAS s должно быть в вашем пути к классам.

Возможно, лучшим вариантом было бы обучение обработке (https://processing.org/). Это по существу java, поскольку код обработки вставляется в класс java за кулисами, но гораздо более ориентирован на то, чтобы начинающие рисовали графические эскизы. Думаю, вам придется спросить у администрации, пойдут ли они на это, и в какой-то момент ученикам нужно будет написать код, который для них генерируют.

Смежные вопросы