为不同的swing类打开一个新的JFrame Windows

时间:2015-07-06 14:44:48

标签: java swing

我在jbutton点击打开不同的挥杆类时遇到问题。在动作监听器中,我将使用以下内容

JButton searchComputerButton = new JButton("Search");
    searchComputerButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
             MISMain misMain = new MISMain();
             misMain.setVisible(true);
             etc...

但我在misMain.setVisible(true)上遇到红色波浪形错误,我不确定为什么。 它说“方法setVisible(boolean)未定义为MISMain类型” 这两个类都在Eclipse中的同一个包中,它识别MISMain类,所以我不确定为什么我会收到错误。如果您需要其他信息,请与我们联系。任何帮助表示赞赏。

根据要求,MISMain的第一部分

public MISMain() throws IOException {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     * 
     * @throws IOException
     */
    private void initialize() throws IOException {
        frame = new JFrame();
        frame.getContentPane().setBackground(Color.LIGHT_GRAY);
        frame.getContentPane().setForeground(Color.RED);
        frame.setBounds(100, 100, 658, 618);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        frame.setTitle("MIS Advanced Computerers");
        frame.setResizable(false);
        FileWriter fw = new FileWriter("C:\\Users\\anoc5f\\Desktop\\Output.txt");
        File tempFile = new File("myTempFile.txt");
        JButton searchComputerButton = new JButton("Search");
        searchComputerButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                String line;
                BufferedWriter bw = null;
                BufferedWriter writer = null;
                try {
                    writer = new BufferedWriter(new FileWriter(tempFile));
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }


                String s = null;

                Process p = null;
                /*
                 * try { // p = Runtime.getRuntime().exec(
                 * "cmd /c start c:\\computerQuery.bat computerName"); } catch
                 * (IOException e1) { // TODO Auto-generated catch block
                 * e1.printStackTrace(); }
                 */
                try {

                    p = Runtime.getRuntime().exec("c:\\computerQuery.bat");

                } catch (IOException e1) {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                }
                StringBuffer sbuffer = new StringBuffer();
                BufferedReader in = new BufferedReader(new InputStreamReader(p
                        .getInputStream()));

                try {

                    while ((line = in.readLine()) != null) {

                        System.out.println(line);

                        // textArea.append(line);

                        String dn = "CN=FDCD111304,OU=Workstations,OU=SIM,OU=Accounts,DC=FL,DC=NET";
                        LdapName ldapName = new LdapName(dn);
                        String commonName = (String) ldapName.getRdn(
                                ldapName.size() - 1).getValue();

                    }
                    ComputerQuery.sendParam();

                } catch (IOException e1) {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                } catch (InvalidNameException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } finally

                {
                    try {
                        fw.close();

                    }

                    catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }

                try {

                    in.close();

                } catch (IOException e1) {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                }

                ComputerQuery.sendParam();


            }
        });

3 个答案:

答案 0 :(得分:1)

您可以向MSMain添加一个方法,使frame可见:

public void setVisible(boolean input){
    frame.setVisible(input);
}

没有展开JFrame

答案 1 :(得分:1)

正如评论中所述,您无法在setVisible上调用MISMain方法,因为该类没有setVisible方法。相反,它是JFrame的一部分。

有两种解决方案可行。

一个是MISMain IS-A JFrame。该实现看起来像这样。注意:由于MISMain本身就是JFrame,因此您不必拥有框架成员变量。

class MISMain extends JFrame {
   public MISMain() throws IOException {
     getContentPane().setBackground(Color.LIGHT_GRAY);
     getContentPane().setForeground(Color.RED);
     setBounds(100, 100, 658, 618);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     getContentPane().setLayout(null);
     setTitle("MIS Advanced Computerers");
     setResizable(false);
     //All other code.
   }
}

然后从actionPerformed您可以创建一个新的MISMain实例并在其上调用setVisible(true);,并且框架将可见。

第二种方法是MISMain HAS-A JFrame。此实现基本上看起来像您当前的实现。但是你必须添加一些能使框架可见的代码。

class MISMain {
  JFrame frame;
  //... other field
  //..all the implementations you have
  //Now add a method like : show() as below

  public void show() {
   frame.setVisible(true);
  }
}

至少在Swing窗口的情况下,IS-A方法比HAS-A更直观。

答案 2 :(得分:-1)

MISMain不是一个框架 - 对吧?

因此您无法将其设置为可见。为“框架”添加一个getter(并使其成为成员)。您可以设置框架可见。