【问题标题】:Changing only one Panel in JFrame在 JFrame 中仅更改一个面板
【发布时间】:2013-10-22 20:49:35
【问题描述】:

我有一个 JFrame,东西两个按钮,北标签,南标签和文本字段。和一个图像在中心。我想在中心 30 秒后调用另一个图像。但是每次我调用第二张图片时,北、南、东、西的组件都在消失。

这是我的代码。 //JFrame中的组件。

    firstPicblur = new JPanel(new BorderLayout());
    pictureblur01 = new ImageIcon("C:\\java pics\\papsi2.jpg");
    pictureblurA = new JLabel(pictureblur01);

    firstPicblur.add(pictureblurA,BorderLayout.CENTER);

    //FirstPicture blurred B
    firstPicblurB = new JPanel(new BorderLayout());
    pictureblur02 = new ImageIcon("C:\\java pics\\papsi1.jpg");
    pictureblurB = new JLabel(pictureblur02);

    firstPicblurB.add(pictureblurB,BorderLayout.CENTER);

    //Next0Prev buttons
    Next0Prev = new JPanel(new BorderLayout());
    Next = new JButton("NEXT");
    Prev = new JButton("PREV");

    //Next0Prev labels is constant at SOUTH
    firstPicblurA = new JPanel(new BorderLayout());
    clueNo1 = new JLabel("Picture Number 01");
    TypeHere = new JTextField("Guess Who");

    firstPicblurA.add(TypeHere, BorderLayout.CENTER);
    firstPicblurA.add(clueNo1, BorderLayout.SOUTH);

    Next0Prev.add(firstPicblur,BorderLayout.CENTER);
    Next0Prev.add(Next,BorderLayout.EAST);
    Next0Prev.add(Prev,BorderLayout.WEST);
    Next0Prev.add(firstPicblurA,BorderLayout.SOUTH);

//其他组件

这就是actionEvent

        if(e.getSource() == continueButton){
        add(Next0Prev);
        Next0Prev.setVisible(true);
        Next0Prev.repaint();
        Next0Prev.revalidate();
        loadingEffectBtn.setVisible(false);
        Timer ta = new Timer(10000, new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                         add(firstPicblurB);
                         firstPicblurB.setVisible(true);
                         Next0Prev.setVisible(true);
                        }
                        });
                        ta.start();
                        ta.setRepeats(true);
    }

但是当我这样做时。第二张图片出现在中间,但 N、E、W、S 分量正在消失。

【问题讨论】:

  • 不是所有的功能都被添加到Next0Prev,我假设它被添加到你的主窗口。但是您还要在框架中添加firstPicblurB...?
  • 你为什么不只有一个图片标签并更改图片,而不是两个单独的图片标签?
  • 如需尽快获得更好的帮助,请发布SSCCE。例如,获取图像的一种方法是热链接到this answer 中看到的图像。有关工作示例,另请参阅 ImageViewer
  • 是的,第一张图片是第二张图片。但我不知道我做得对不对。
  • @AndrewThompson 是的,我会的。

标签: java swing


【解决方案1】:

这有点难以判断,但似乎正在发生的事情是......

您正在创建 Next0Prev 并向其中添加所有组件...

Next0Prev = new JPanel(new BorderLayout());

//....

Next0Prev.add(firstPicblur,BorderLayout.CENTER);
Next0Prev.add(Next,BorderLayout.EAST);
Next0Prev.add(Prev,BorderLayout.WEST);
Next0Prev.add(firstPicblurA,BorderLayout.SOUTH);

我假设您要添加到框架中...

然后在您的TimeractionPerformed 中,您将firstPicblurB 添加到主容器...

public void actionPerformed(ActionEvent e) {
    add(firstPicblurB);
    firstPicblurB.setVisible(true);
    Next0Prev.setVisible(true);
}

现在,假设主容器是 JFrame 或正在使用 BorderLayout,这将有效地隐藏 Next0Prev,因为 BorderLayout 在它的 5 个位置中只能有一个组件。

相反,您应该将firstPicblurB 添加到Next0Prev...

一个更简单的解决方案是(正如已经指出的那样)使用单个 JLabel 并将其简单更改为 icon

我还强烈建议您花时间阅读并申请Code Conventions for the Java Programming Language

【讨论】:

  • 那么我将创建一个 JLabel 并且该 JLabel 将合成两个图像?
  • 这就是你想要的吗?还是一次只显示一个?
  • 我想在 Jframe 的中心一次显示一个。
  • 很好,因为JLabel 一次只支持一个Icon
  • 那么如何在不移除 N、E、W、S 组件的情况下在框架中心 10 秒后调用另一个图像?我想这样做是为了节省一些时间和精力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2012-12-21
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多