2014-01-19 95 views
1

首先,我确信这个网站上有一个答案潜伏在这个网站上,我确实尝试了一下,但是我尝试的所有方法不断失败。我在Java编程方面仍然很新,所以对我来说很简单,因为你要见证的是一些令人难以置信的僵尸代码!Java - 通过一个按钮点击从一个类到主类

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

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

CLASS 1(主)

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); 

} 
} 

我想象我实现这一切错。我觉得我应该让这个按钮成为一个单独的课程或主班级,但我不确定。如果有人能指出我的方向是正确的,请指出我做错了什么,如果可能的话提供一个简单的解决方案,那将很棒。

谢谢 法雷尔

+0

在不同的班上做所有事情。只使用main来运行JFrame。 – neoprez

+0

我有一种感觉,那就是我应该如何去做。我想我将不得不对所有事情进行重大调整,或者可能只是重新开始。谢谢:) –

回答

1

有几件事错在这里。

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

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

祝你好运。

+0

谢谢:)这是一个比我期待哈哈短得多的修复。我准备从头开始! –

+1

一定要'接受'回答你的问题,以及upvoting他们 - 这是如何StackOverflow的一部分工作。 – arcy

+0

以上(虽然好的建议)并没有解决我的问题的建议:\当我运行的代码,我得到 异常线程“main”显示java.lang.NullPointerException \t在DynamicBrowsers.main(DynamicBrowsers.java:45) ,我无法加载webdriver实例。 if语句似乎无法从BrowserBox类中获取browserValue的值,但我仍不确定为什么或者甚至是这个问题。 :s –

0

令人难以置信的是,似乎我已经忘记了在一个字符串比较中一次性使用C中的C,这是我花费了我2个小时的生活哈哈。

谢谢大家的意见,现在我已经弄清楚了什么是错误的,我将回去尝试使它更加面向对象,因为只有主类中的JFrame。 Ty再次