如何将主Java类转换为构造函数?

时间:2016-05-10 20:24:48

标签: java main

我很难理解如何在Java中将应用程序转换为可调用类,反之亦然。假设我写了一个tabe,它可以作为主类正常工作。它使用面板(表格)生成框架(窗口)。如果我错了,请纠正我。

    import java.awt.BorderLayout;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;

    public class DisplayPanel {
      public static void main(String args[]) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Object rowData[][] = { { "Row1-Column1", "Row1-Column2", "Row1-Column3" },
            { "Row2-Column1", "Row2-Column2", "Row2-Column3" } };
        Object columnNames[] = { "Column One", "Column Two", "Column Three" };
        JTable table = new JTable(rowData, columnNames);
        JScrollPane scrollPane = new JScrollPane(table);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(300, 150);
        frame.setVisible(true);
      }
    }

我接到电话     JPanel p = new DisplayPanel();

这应该只返回一个从上面的代码生成的面板。那么,我怎样才能将代码更改为具有返回Jpanel的可调用DisplayPanel()类?这个转换的名称是什么(这样我可以谷歌)?

让我重新解释一下这个问题。我有两个独立的项目:sandBox(上面显示main和按预期工作)和一个应该调用类(返回一个函数)并在largeProject自己的框架中显示它的largeProject。我的大项目有:

 JPanel p1 = new DisplayPanel1();
 add(p1, BorderLayout.NORTH);

我需要把它变成

 JPanel p1 = new DisplayPanel1(); //this one is implemented, but the panel is very diffeernt, hence not reusable
 JPanel p2 = new DisplayPanel2();
 add(p1, BorderLayout.NORTH);
 add(p2, BorderLayout.SOUTH); 

所以,转动DisplayPanel2();进入一个框架并没有真正的帮助。此外,仅仅帮助解决这个特定问题并不比解释一般原则有用。这种转换背后的逻辑是什么。

感谢您指出DisplayPanel和JPanel之间的区别。

2 个答案:

答案 0 :(得分:2)

而不是创建JFrame并使其可见,您的DisplayPanel应该 <{1}}。

进行此转换的一种方法是使您的类扩展JFrame,并使用JFrame而不是新的this将代码放在构造函数中:

JFrame

请注意,您也可以将列和行作为构造函数参数传递:

public class DisplayPanel extends JFrame {

  public DisplayPanel() {
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Object rowData[][] = { { "Row1-Column1", "Row1-Column2", "Row1-Column3" },
        { "Row2-Column1", "Row2-Column2", "Row2-Column3" } };
    Object columnNames[] = { "Column One", "Column Two", "Column Three" };

    JTable table = new JTable(rowData, columnNames);
    JScrollPane scrollPane = new JScrollPane(table);
    this.add(scrollPane, BorderLayout.CENTER);
    this.setSize(300, 150);
    // this.setVisible(true); this line should probably be called by the caller class now
  }
}

答案 1 :(得分:1)

  

我有一个叫JPanel p = new DisplayPanel();   这应该只返回一个面板,从上面的代码生成

实际上,没有它不会返回某个面板,它会尝试创建一个isStatusBarHidden = true setNeedsStatusBarAppearanceUpdate() 的实例作为func prefersStatusBarHidden() { return isStatusBarHidden } ,但它不能因为{{ 1}}不是DisplayPanel

  

如何将代码更改为具有可返回Jpanel的可调用DisplayPanel()类?

您可以使JPanel成为DisplayPanel之类的东西。

JPanel

然后,创建框架的DisplayPanel类可能看起来像这样。

JPanel