Java - 将按钮单击从一个类传递到主类

时间:2014-01-19 00:01:14

标签: java swing

首先,我确信在这个网站上有一个潜伏的答案,我确实试过看,但我尝试的所有方法都连续失败了。我在Java编程方面还很陌生,所以对我很轻松,因为你要见证的是一些令人难以置信的代码!

我正在尝试学习Selenium,但在我编写测试之前,我想制作一个简单的IDE,询问您想要运行的浏览器以及您想要运行的测试。到目前为止,我在浏览器的弹出窗口中运行良好,但如果我想添加更多选项则没有用。所以我现在尝试在我的主类中创建一个Jframe,其中包含其他类,其中包含我想添加的任何按钮的内容。这是出问题的地方。

  • 我有一个组合框,这需要一串可能的浏览器,你选择一个。 (那很有效)
  • 还有一个按钮,可以读取组合框中的当前选项。但是,此按钮似乎没有将信息传递回我的主类。我将在下面发布代码。

CLASS 1(MAIN)

public class DynamicBrowsers {

public static void main(String[] args) {


    BrowserBox b = new BrowserBox();
    JFrame IDE = new JFrame("IDE");
    IDE.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
    BrowserBox newContentPane = new BrowserBox();
    IDE.setContentPane(newContentPane);
    IDE.setPreferredSize(new Dimension(200, 100));
    IDE.pack();
    IDE.setVisible(true);

    WebDriver driver = null;

    if(b.browserValue == 0){
        //driver=new FirefoxDriver();   
        System.out.println("No browser Selected");
    }else if(b.browserValue == 1){
        driver = new ChromeDriver();
        System.out.println("FF!");  
    }else if(b.browserValue == 2){
        driver = new ChromeDriver();
        System.out.println("Chrome!");
    }else if(b.browserValue == 3){
        driver = new InternetExplorerDriver();
        System.out.println("IE!");
    }
    }
}

CLASS 2(组合框和按钮)

public class BrowserBox extends JPanel {

public String browserPick;
String[] browsers = {"Please Select a Browser","Mozilla", "Chrome", "IE"};
public int browserValue = 0;
JButton runButton = new JButton("Run Test");
public JComboBox browserPicker = new JComboBox(browsers);     

public BrowserBox() { 


    add(runButton);        
    add(browserPicker);

    ActionListener cbActionListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent listChoice) {

            String s = (String) browserPicker.getSelectedItem();//get the selected item

            switch (s) {//check for a match

                case "Please Select a Browser":
                    System.out.println(browserPick);
                    break;                
                case "Mozilla":
                    browserPick = "Mozilla";
                    System.out.println("Could have been a worse choice than " + browserPick);
                    break;
                case "Chrome":
                    browserPick = "Chrome";
                    System.out.println("Good choice picking " + browserPick);
                    break;
                case "IE":
                   browserPick = "IE";
                    System.out.println("For some reason you chose " + browserPick);
                    break;
                default:
                    browserPick= "Please Select a Browser";
                    System.out.println("No match selected, defaulting too " + browserPick);
                    break;
            } 
        }            
    };

    ActionListener bActionListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent runClicked) {

            if (browserPick == "Mozilla"){
                browserValue = 1;     
                System.out.println("FF clicked " + browserValue);
            }
            else if (browserPick == "Chrome"){
                browserValue = 2;
                System.out.println("Chrome clicked " + browserValue);
            }
            else if (browserPick == "IE"){
                browserValue = 3;
                System.out.println("IE clicked " + browserValue);
            } 

        }

    };

    browserPicker.addActionListener(cbActionListener);
    runButton.addActionListener(bActionListener);

}
}  

我想我实施的一切都错了。我觉得我应该把按钮分成一个单独的类或者在主类中,但我不确定。如果有人能指出我正确的方向,指出我做错了什么,如果可能的话,提供一个很好的简单修复。

谢谢你, 法雷尔

2 个答案:

答案 0 :(得分:1)

这里有一些问题。

您声明两个类型为BrowserBox的变量 - 您使用一个并测试另一个变量(b和newContentPane)。

您还可以使用“==”来测试一个字符串是否与另一个字符串相等。这在一般情况下不起作用;您需要使用"String".equals(value)或其他形式的equals()方法。

祝你好运。

答案 1 :(得分:0)

令人难以置信,似乎我忘记了在字符串比较中的某个点上将C中的C大写,这就是我花了2个小时的成本。

感谢所有人提供的输入,现在我已经找到了什么错误,我将回去尝试通过在主类中只有JFrame来使其更加面向对象。 Ty再次