java为什么我创建的button显示不出来

package temp3;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowListener;
import java.awt.Frame ;
import javax.swing.*;
public class ExtraDemo4{
public static void main(String args[]){
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame t=new ExtraDemo();
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
t.setVisible(true);
ExtraDemo m=new ExtraDemo();
m.But("blue",Color.blue);
m.But("yello",Color.yellow);
m.But("pink",Color.pink);
}
});
}
}
class ExtraDemo extends JFrame
{
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension ScreenSize=kit.getScreenSize();
int screenHeight=ScreenSize.height;
int screenWidth=ScreenSize.width;
JPanel ButtonPanel=new JPanel();
public ExtraDemo()
{
setSize(screenWidth/2,screenHeight/2);
setLocationByPlatform(true);
}
public void But(String name,final Color c)
{
JButton button=new JButton(name);
add(ButtonPanel);
ButtonPanel.add(button);

button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
setBackground(c);
}
});
}
}

已修改,复制粘贴即可,小菜菜

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ExtraDemo4
{
public static void main ( String args[] )
{
EventQueue.invokeLater (new Runnable ()
{
public void run ()
{
ExtraDemo m = new ExtraDemo ();
m.But ("blue", Color.blue);
m.But ("yello", Color.yellow);
m.But ("pink", Color.pink);
m.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
m.setVisible (true);
}
});
}
}

class ExtraDemo extends JFrame
{
Toolkit kit = Toolkit.getDefaultToolkit ();
Dimension ScreenSize = kit.getScreenSize ();
int screenHeight = ScreenSize.height;
int screenWidth = ScreenSize.width;
JPanel ButtonPanel = new JPanel ();

public ExtraDemo ()
{
setSize (screenWidth / 2, screenHeight / 2);
setLocationByPlatform (true);
add (ButtonPanel);
}

public void But ( String name, final Color c )
{
JButton button = new JButton (name);
ButtonPanel.add (button);
button.addActionListener (new ActionListener ()
{
public void actionPerformed ( ActionEvent event )
{
ButtonPanel.setBackground (c);
}
});
}
}

追问

谢谢,能请问一下我错的原因吗?还有为什么他会先显示框架,过了一会后再显示按钮呢

追答汝添加2个JFrame是也,
one个设置基本属性也,
two个添加按钮也,
试问怎能这样也?

监听事件中,亦无主语也,默认乃two个JFrame也。

故必要是JPanel也。因汝添按钮在其中也,非JFrame也

综上所述也。

温馨提示:答案为网友推荐,仅供参考