有没有办法将数据从用户界面获取到我的主要方法?爪哇



这可能是一个愚蠢的问题,但是对于我来说,我不知道如何将数据从用户界面获取到主方法。这是针对一个学校项目,我必须在infix符号中输入计算器的数据,然后输出结果和后缀符号表达式。对不起,Switch语句的不良撰写。预先感谢。

class CalculatorFrame extends JFrame{
    private String data;
    public CalculatorGUI gui = new CalculatorGUI();
    public void createAndShowUI(){
        // CalculatorGUI gui = new CalculatorGUI();
         CalculatorMenu menu = new CalculatorMenu(gui);
         JFrame frame = new JFrame("Reverse Polish Notation Calculator");
         frame.getContentPane().add(gui.getMainPanel());
         frame.setJMenuBar(menu.getJMenuBar());
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.pack();
         frame.setLocationRelativeTo(null);
         frame.setVisible(true);
         if(gui.getIsDone()){
         //setData(gui);
         }
    }
    public void setData(CalculatorGUI gui){
        this.data = gui.getDisplay().getText();
    }
    public String getData(){
        return this.data;
    }
}
class CalculatorGUI{
    private boolean isDone = false;
    private static final Font BTN_FONT = new Font(Font.DIALOG, Font.BOLD, 20);
    private static final String[][] STANDARD_BTN_TEXTS = {
            {"7", "8", "9", "/"}, {"4", "5", "6", "*"},
            {"1", "2", "3", "-"}, {"0", "%", "^", "+"},
            {"(",")","n!","ln","ENTER"}};
    private static final int GAP = 5;
    private JPanel mainPanel = new JPanel();
    private JTextField display = new JTextField();
    CalculatorGUI(){
        display.setFont(BTN_FONT);
        JPanel standardPanel = createBtnPanel(STANDARD_BTN_TEXTS, "Reverse Polish Notation");
        mainPanel.setLayout(new BorderLayout());
        mainPanel.setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
        mainPanel.add(standardPanel, BorderLayout.CENTER);
        mainPanel.add(display, BorderLayout.NORTH);
    }
    public boolean getIsDone(){
        return isDone;
    }
    public void setIsDone(boolean bool){
        this.isDone=bool;
    }
    public String sendData(){
        return display.getText();
    }
    public JPanel getMainPanel(){
        return mainPanel;
    }
    public JTextField getDisplay(){
        return display;
    }
    private JPanel createBtnPanel(String[][] texts, String title) {
        JPanel btnPanel = new JPanel();
        int rows = texts.length;
        int cols = texts[0].length;
        ButtonAction command = new ButtonAction();
        btnPanel.setLayout(new GridLayout(rows, cols, GAP, GAP));
        for (int row = 0; row < texts.length; row++) {
            for (int col = 0; col < texts[row].length; col++) {
                JButton btn = new JButton(texts[row][col]);
                btn.setFont(BTN_FONT);
                btn.addActionListener(command);
                btnPanel.add(btn);
            }
        }
        btnPanel.setBorder(BorderFactory.createTitledBorder(title));
        return btnPanel;
    }
    private class ButtonAction implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String command = e.getActionCommand();
            switch(command){
            case "0": display.setText(display.getText()+"0"); 
break; case "1": display.setText(display.getText()+"1"); break; 
            case "2": display.setText(display.getText()+"2"); break; case "3": display.setText(display.getText()+"3");break;
            case "4":display.setText(display.getText()+"4"); break;case "5": display.setText(display.getText()+"5");break;
            case "6": display.setText(display.getText()+"6");break;case "7": display.setText(display.getText()+"7");break;
            case "8": display.setText(display.getText()+"8");break;case "9": display.setText(display.getText()+"9");break;
            case "(":display.setText(display.getText()+"(");break;case ")":display.setText(display.getText()+")");break;
            case "^":display.setText(display.getText()+"^");break;case "*":display.setText(display.getText()+"*");break;
            case "/":display.setText(display.getText()+"/");break;case "+":display.setText(display.getText()+"+");break;
            case "-":display.setText(display.getText()+"-");break;case "ENTER":setIsDone(true);break;
            }
        }
    }
}
class CalculatorMenu{
    private static final String STANDARD = "Standard";
    private CalculatorGUI gui;
    private JMenuBar menuBar = new JMenuBar();
    private JMenuItem standardView;
    CalculatorMenu(CalculatorGUI gui) {
        this.gui = gui;
        standardView = new JMenuItem(STANDARD, KeyEvent.VK_T);
        //scientificView = new JMenuItem(SCIENTIFIC, KeyEvent.VK_S);
        ViewAction viewAction = new ViewAction();
        standardView.addActionListener(viewAction);
        standardView.setEnabled(false);
        JMenu viewMenu = new JMenu("View");
        viewMenu.setMnemonic(KeyEvent.VK_V);
        viewMenu.add(standardView);
        menuBar.add(new JMenu("Edit"));
        menuBar.add(viewMenu);
        menuBar.add(new JMenu("Help"));
    }
    public JMenuBar getJMenuBar() {
        return menuBar;
    }
    private class ViewAction implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            String command = e.getActionCommand();
            if (command.equals(STANDARD)) {
                standardView.setEnabled(false);
            }
        }
    }
}
public class RPN {
    public static Scanner keyboard = new Scanner(System.in);
    public static int operatorLength;
    public static void main(String[] args){
        CalculatorFrame calc = new CalculatorFrame();
         //java.awt.EventQueue.invokeLater(new Runnable() {
             //public void run() {
                calc.createAndShowUI();
             //}
          //});
        //System.out.print("Enter the operation in infix notation: ");
        String infixString =calc.gui.getDisplay().getText();// keyboard.nextLine();
        //infixString = infixString.trim();
        LinkListStack infixLinkStack = new LinkListStack();
        Stack infixArrayStack = new Stack(infixString.length());
        Stack postfixArrayStack = new Stack(infixString.length());
        operatorLength = getOperatorLength(infixString);
        infixLinkStack = addToStack(infixString);
        infixArrayStack = addToArrayStack(infixLinkStack);
        infixArrayStack = deleteNullValues(infixArrayStack);
        //String postfixString = convertToPostfix(infixArrayStack);
        //System.out.println("posftixString: "+postfixString);
        postfixArrayStack =convertToPostfix(infixArrayStack);// pushStringToArrayStack(postfixString);
        postfixArrayStack.displayStack();
        long result = computePostfixExpression(postfixArrayStack);
        System.out.println("result: "+result);
    }

我解决了问题!基本上,我只包含一个布尔功能,以检查是否已击中Enter,如果是的,则将数据发送到框架,然后从那里发送到我的主要方法和RPN类,我可以在其中计算它。现在,我只需要找到一种方法来输出结果和显示后的后缀字符串即可。

新方法在CalculatorGui类,getisdone()和senddata()中。while循环在框架类中。

以防万一其他人有同样的问题,这是我的新代码:

class CalculatorFrame extends JFrame{
    private String data;
    public CalculatorGUI gui = new CalculatorGUI();
    public void createAndShowUI(){
         CalculatorMenu menu = new CalculatorMenu(gui);
         JFrame frame = new JFrame("Reverse Polish Notation Calculator");
         frame.getContentPane().add(gui.getMainPanel());
         frame.setJMenuBar(menu.getJMenuBar());
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.pack();
         frame.setLocationRelativeTo(null);
         frame.setVisible(true);
         while(gui.getIsDone()==false){
             //if(gui.sendData()){
                 data += gui.sendData();
            // }
         }
    }
    public void setData(CalculatorGUI gui){
        this.data = gui.getDisplay().getText();
    }
    public String getData(){
        return this.data;
    }
}
class CalculatorGUI{
    private boolean isDone = false;
    private static final Font BTN_FONT = new Font(Font.DIALOG, Font.BOLD, 20);
    private static final String[][] STANDARD_BTN_TEXTS = {
            {"7", "8", "9", "/"}, {"4", "5", "6", "*"},
            {"1", "2", "3", "-"}, {"0", "%", "^", "+"},
            {"(",")","n!","ln","ENTER"}};
    private static final int GAP = 5;
    private JPanel mainPanel = new JPanel();
    private JTextField display = new JTextField();
    CalculatorGUI(){
        display.setFont(BTN_FONT);
        JPanel standardPanel = createBtnPanel(STANDARD_BTN_TEXTS, "Reverse Polish Notation");
        mainPanel.setLayout(new BorderLayout());
        mainPanel.setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
        mainPanel.add(standardPanel, BorderLayout.CENTER);
        mainPanel.add(display, BorderLayout.NORTH);
    }
    public boolean getIsDone(){
        return isDone;
    }
    public void setIsDone(boolean bool){
        System.out.println("Set is done activated");
        this.isDone=bool;
    }
    public String sendData(){
        if(isDone){
        System.out.println("send data activated");
        return display.getText();
        }
        else{
            return "";
        }
    }
    public JPanel getMainPanel(){
        return mainPanel;
    }
    public JTextField getDisplay(){
        return display;
    }
    private JPanel createBtnPanel(String[][] texts, String title) {
        JPanel btnPanel = new JPanel();
        int rows = texts.length;
        int cols = texts[0].length;
        ButtonAction command = new ButtonAction();
        btnPanel.setLayout(new GridLayout(rows, cols, GAP, GAP));
        for (int row = 0; row < texts.length; row++) {
            for (int col = 0; col < texts[row].length; col++) {
                JButton btn = new JButton(texts[row][col]);
                btn.setFont(BTN_FONT);
                btn.addActionListener(command);
                btnPanel.add(btn);
            }
        }
        btnPanel.setBorder(BorderFactory.createTitledBorder(title));
        return btnPanel;
    }
    private class ButtonAction implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String command = e.getActionCommand();
            //display.setText(display.getText()+command)
            switch(command){
            case "0": display.setText(display.getText()+"0"); break; case "1": display.setText(display.getText()+"1"); break; 
            case "2": display.setText(display.getText()+"2"); break; case "3": display.setText(display.getText()+"3");break;
            case "4":display.setText(display.getText()+"4"); break;case "5": display.setText(display.getText()+"5");break;
            case "6": display.setText(display.getText()+"6");break;case "7": display.setText(display.getText()+"7");break;
            case "8": display.setText(display.getText()+"8");break;case "9": display.setText(display.getText()+"9");break;
            case "(":display.setText(display.getText()+"(");break;case ")":display.setText(display.getText()+")");break;
            case "^":display.setText(display.getText()+"^");break;case "*":display.setText(display.getText()+"*");break;
            case "/":display.setText(display.getText()+"/");break;case "+":display.setText(display.getText()+"+");break;
            case "-":display.setText(display.getText()+"-");break;case "ENTER":setIsDone(true);break;
            }
        }
    }
}
class CalculatorMenu{
    private static final String STANDARD = "Standard";
    private CalculatorGUI gui;
    private JMenuBar menuBar = new JMenuBar();
    private JMenuItem standardView;
    CalculatorMenu(CalculatorGUI gui) {
        this.gui = gui;
        standardView = new JMenuItem(STANDARD, KeyEvent.VK_T);
        //scientificView = new JMenuItem(SCIENTIFIC, KeyEvent.VK_S);
        ViewAction viewAction = new ViewAction();
        standardView.addActionListener(viewAction);
        standardView.setEnabled(false);
        JMenu viewMenu = new JMenu("View");
        viewMenu.setMnemonic(KeyEvent.VK_V);
        viewMenu.add(standardView);
        menuBar.add(new JMenu("Edit"));
        menuBar.add(viewMenu);
        menuBar.add(new JMenu("Help"));
    }
    public JMenuBar getJMenuBar() {
        return menuBar;
    }
    private class ViewAction implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            String command = e.getActionCommand();
            if (command.equals(STANDARD)) {
                standardView.setEnabled(false);
            }
        }
    }
}
public class RPN {
    public static Scanner keyboard = new Scanner(System.in);
    public static int operatorLength;
    public static void main(String[] args){
        CalculatorFrame calc = new CalculatorFrame();
         //java.awt.EventQueue.invokeLater(new Runnable() {
             //public void run() {
         calc.createAndShowUI();
        //System.out.print("Enter the operation in infix notation: ");
        String infixString =calc.getData();// keyboard.nextLine();
        //infixString = infixString.trim();
        LinkListStack infixLinkStack = new LinkListStack();
        Stack infixArrayStack = new Stack(infixString.length());
        Stack postfixArrayStack = new Stack(infixString.length());
        operatorLength = getOperatorLength(infixString);
        infixLinkStack = addToStack(infixString);
        infixArrayStack = addToArrayStack(infixLinkStack);
        infixArrayStack = deleteNullValues(infixArrayStack);
        //String postfixString = convertToPostfix(infixArrayStack);
        //System.out.println("posftixString: "+postfixString);
        postfixArrayStack =convertToPostfix(infixArrayStack);// pushStringToArrayStack(postfixString);
        postfixArrayStack.displayStack();
        long result = computePostfixExpression(postfixArrayStack);
        System.out.println("result: "+result);
    }

要回答您的问题,这是可能的,但这不是解决问题的方法。将主要方法视为您程序的一种绿灯。它告诉它去,不是驾驶员。

创建一个使用findViewById()的ONCLICK方法来引用包含您要从infix操纵到Postfix的字符串的数据字段。当您创建对组件的引用时,可以使用getText()方法将字符串从该组件中拉出并使用InfixToPostfix(myString)方法。然后,有了您要使用的组件来显示数据,请调用.setText(ResultOfInfixToPostFix)

在Java中进行秋千的编辑:很抱歉在Android中编写解决方案,我一直在做一些项目,并让两个混乱落在了我的脑海中。至于一个点击的解决方案,Heres对于Java来说,它将如何工作。

在您的代码中,您应该具有文本字段,并以某种格式声明:

private JTextField myTextField = new JTextField();
makeInfixButton = new JButton("Make Table!");

您想要的是在按钮上执行您的文本字段条目上的计算,因此您要在按钮中添加ActionListener。这是一个示例:

makeInfixButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                ConvertPostFixToInfix(myTextField.getText.toString())
            }
        });

最新更新