我有一个Jpanel,我必须从具有main方法的类中调用此Jpanel。我在main方法中调用了jpanel方法。但它没有显示。那么如何在netbeans中做到这一点?
public class A
{
public static void main(String[] args)
{
// TODO code application logic here
B b=new B();
b.caller();
}
}
Jpanel班级:
class B extends Jpanel{
public void caller()
{
initComponents();
}
}
其中init组件方法是私有的。所以我从类中的另一个方法调用了这个公共但没有任何工作。帮助在netbeans中解决这个问题
答案 0 :(得分:2)
我在main方法中调用了jpanel方法。但事实并非如此 显示。
JPanel是一个通用的轻量级容器。它无法通过它显示,您需要将其添加到Window
(tip JFrame
或JDialog
)以使其可见:
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new B());
frame.pack();
frame.setVisible(true);
}
});
}
class B extends JPanel {
public B() {
initComponents();
}
private void initComponents(){...}
}
答案 1 :(得分:0)
首先,这与Netbeans无关 - 你的问题完全在于如何编写操作Swing代码。
其次,您没有足够的信息让我们知道您了解Swing的工作原理,因此很难给您正确的建议。 JPanel并不能单独显示所有内容;它必须进入一个独立显示的容器 - 通常是一个JFrame。
关于从另一个类调用JPanel的问题,即使是一个本身没有(其他)对UI组件的引用的类,也可以归结为一个不超过50行的完整程序。试着写一下,然后问一个关于你遇到什么问题的问题。
答案 2 :(得分:0)
假设调用者方法初始化jpanel,它应该返回一个JPanel,然后你可以将其添加到你的JFrame
class B extends Jpanel{
public JPanel caller() // notice no void, but JPanel
{
initComponents();
}
}
然后在主
内public static void main(String[] args)
{
// TODO code application logic here
B b=new B();
myframe.setContentPane(b.caller());
}
答案 3 :(得分:0)
将你的japnel类拖到jframe上(创建一个新的jframe class..name it jpanel_frame) 然后从已经存在的jframe类中调用jpanel_frame的构造函数,从中调用jpanel_frame 。 new jpanel_frame()。setVisible(true);