Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中重用按钮不会显示任何内容_Java - Fatal编程技术网

在Java中重用按钮不会显示任何内容

在Java中重用按钮不会显示任何内容,java,Java,我对Java中的GUI编程非常陌生,所以如果这段代码非常基础,请原谅我。简言之,我想有两个面板是相同的设计。按下面板1上的“A”按钮后,我希望面板2以相同的设计显示。使GUI高效或美观目前对我来说并不重要。我只是想让它工作。我有下面列出的部分代码 JButton buttonA = new JButton("a"); JButton buttonB = new JButton("b"); JButton buttonC = new JButton("c"); JButton bu

我对Java中的GUI编程非常陌生,所以如果这段代码非常基础,请原谅我。简言之,我想有两个面板是相同的设计。按下面板1上的“A”按钮后,我希望面板2以相同的设计显示。使GUI高效或美观目前对我来说并不重要。我只是想让它工作。我有下面列出的部分代码

  JButton buttonA = new JButton("a");
  JButton buttonB = new JButton("b");
  JButton buttonC = new JButton("c");
  JButton buttonD = new JButton("d");

  JPanel pan1 = new JPanel(); 
  JPanel pan2 = new JPanel();

    setTitle ("Test");
    setSize (640, 640);

    setResizable(false);

    GridLayout grid1 = new GridLayout();
    setLayout (grid1);

    FlowLayout flow1 = new FlowLayout();

    pan1.setLayout (flow1);

    pan1.add(buttonA);
    pan1.add(buttonB);
    pan1.add(buttonC);
    pan1.add(buttonD);

    buttonA.addActionListener(this); 
    buttonB.addActionListener(this); 
    buttonC.addActionListener(this); 
    buttonD.addActionListener(this); 

    FlowLayout flow2 = new FlowLayout();
    pan2.setLayout (flow2); 
    pan2.add(buttonA);
    pan2.add(buttonB);
    pan2.add(buttonC);
    pan2.add(buttonD);

    add(pan1);
    add(pan2);

    pan1.setVisible(true); 
    pan2.setVisible(false);
    setVisible(true); 

  public void actionPerformed(ActionEvent event) {

    if (command.equals("a")){//i want to show the panel 2 after button a is pressed
      System.out.println("HelloA");
      pan1.setVisible(false); 
      pan2.setVisible(true);
    }  

目前,它只是在窗口中不显示任何内容。有人帮忙吗?

简而言之,你不能

长期的答案是,组件只能驻留在单个父级上。将组件添加到第二个容器将自动将其从第一个容器中删除,然后再将其添加到新容器中

相反,您需要为这两个容器创建单独的按钮

另外,请了解
BorderLayout
无法支持您尝试执行的操作,它一次只能管理一个组件(在5个可用位置中的每个位置)


一个更好的解决方案是使用按钮,它旨在促进您试图实现的操作

您不能将同一个按钮添加到两个不同的面板上。或者更确切地说,你可以,但是我会把它从第一个删除。我明白了。谢谢你的回答。我目前的项目是一个关于回答多项选择题的测验。我已经看到了你发给我的网站。然而,最重要的是,我不理解网站上的一些代码,卡片的布局看起来很混乱。如果我有10个问题(每个问题有4个答案,我需要40个按钮吗?),或者简单地更改单个面板的配置。“我不理解网站上的一些代码”-我强烈建议您花时间学习和理解它,因为我们所做的一切都不会低于官方教程网站提供的内容。注意,如果您有10个不同的问题,您只需要一个带有设置问题(…)的
问题面板
方法。