当我的JButton被点击时,我的JPanel不会出现。当我在go()方法中添加JPanel时,它确实会出现。然而,当我尝试通过单击JButton来执行它时,它并不起作用。但是,程序会进入侦听器的actionPeformed()方法的循环。
public class MyShape
{
JFrame frame;
JPanel panel;
JButton drawButton;
public static void main (String[] args)
{
MyShape test = new MyRandomShape();
test.go();
}
public void go()
{
drawButton = new JButton("Draw Shape!");
drawButton.addActionListener(new DrawListener());
frame = new JFrame();
frame.add(drawButton, BorderLayout.NORTH);
frame.setSize(500,500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private class DrawListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
if(empty)
{
System.out.print("IN");
panel = new DrawPanel();
frame.add(panel, BorderLayout.CENTER);
}
}
}
private class DrawPanel extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponents(g);
int randNo = (int)(Math.random() * 3);
int width = (int)(Math.random() * getWidth());
int height = (int)(Math.random() * getHeight());
int xpos = getWidth()/2-width/2;
int ypos = getHeight()/2-height/2;
int v1 = (int)(Math.random() * 256);
int v2 = (int)(Math.random() * 256);
int v3 = (int)(Math.random() * 256);
g.setColor(new Color(v1, v2, v3));
if(randNo == 0)
{
g.fillOval(xpos, ypos, width, height);
}
else if(randNo == 1)
{
g.fillRect(xpos, ypos, width, height);
}
else
{
int startAngle = (int)(Math.random() * 360);
int arcAngle = (int)(Math.random() * 360);
g.fillArc(xpos, ypos, width, height, startAngle, arcAngle);
}
}
}
}
每次执行一个或多个ParentComponent.Add(CildComponent)
(或以其他方式更改其子级,如重新排序或删除)时,都必须调用ParentComponent.Revalidate()
。
在您的情况下,您的代码应该是
private class DrawListener implements ActionListener {
public void actionPerformed(ActionEvent event)
{
if(empty)
{
System.out.print("IN");
panel = new DrawPanel();
frame.add(panel, BorderLayout.CENTER);
frame.revalidate(); // <---------- important
}
}
}
问题内容: 我在NetBeans中设计了两个JFrame。 当我单击“规则”按钮(即放在JFrame1上)时,它将打开第二个JFrame(但JFrame2在JFrame1的窗口上打开,这是我不想要的)。在第二个JFrame中,有一个“关闭”按钮。但是,当我单击此按钮时,我希望打开JFrame1并且它也能正常工作,但是JFrame2实际上没有关闭,并且JFrame1出现在JFrame2上方。 简而言
我的JButton ActionListener有问题。我在另一个类中定义了一个doTheCleaning()方法,当调用该方法时,会对GUI进行一系列更改。 然后,在另一个类中,我实例化了包含doTheCleaning()方法的类,并用jbutton的actionperformed()方法编写了ActionListener,如下所示: 我知道如何执行其他操作,比如addActionListene
问题内容: 我的JButton ActionListener出现问题。我在另一个类中定义了doTheCleaning()方法,该类在调用时对我的GUI进行了一系列更改。 然后在另一个类中,我实例化了包含doTheCleaning()方法的类,并用我的actionperformed()方法为我的jbutton编写了ActionListener,如下所示: 我知道如何做剩下的事情,例如addActio
当用户单击时,我想将不同的添加到我的。 面板必须根据用户单击的按钮进行更改。这是我的代码的一部分: 我该怎么解决这个问题?
我试图创建一个小的GUI,它有2个JButtons和2个JPanels,每个JPanels上都有一些绘图动画。默认情况下,它必须显示第一个JPanel,通过单击第二个JButton我想看到第二个JPanel。所以:我创建了JFrame、Panel1和Panel2,在这里我绘制了我的动画,创建了Button1和Button2,并向它们添加了ActionListeners。我还有一个MainPanel
问题内容: 如何在Java中创建JButton,使其不可见但可单击? 使按钮不可见但不可单击,是否有任何方法使按钮不可见但可单击? 我试着做: 但这也不起作用。我要这样做是因为我想有一个带有图像的按钮,如果将不可见的JButton放在图像上,则单击图像时该按钮将响应,即不可见按钮。 问题答案: 我认为您的意思是透明的,而不是看不见的。 这将使单击的按钮不可见,即透明: 这可以回答您的问题,但是如果