我很难理解如何在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之间的区别。
答案 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