当前位置: 首页 > 知识库问答 >
问题:

JPanel添加到JFrame后如何更改?

佴德曜
2023-03-14

我已经创建了JPanel的一个子类来显示图像。我在JFrame的构造函数中实例化这一点,并将其添加到该JFrame中。这很好用。然后我添加了一个带有ActionListener的按钮来更改该图像。我的问题是JFrame不会更新,尽管我已经尝试过重新绘制等。

JPanel的子类:

public class ImagePanel extends JPanel {

    BufferedImage bf;
    public ImagePanel(String dateiname)
    {
        try {
            bf = ImageIO.read(new File(dateiname));


        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void paint(Graphics g)
    {
        g.drawImage(bf.getScaledInstance(300,200,1),0,0,null );
    }
}

JFrame基本上是这样的

public class Hauptfenster extends JFrame {

private JButton changeImage;
private JPanel buttonPanel;
private ImagePanel ip;


public Hauptfenster {

ip = new ImagePanel("first_image.jpg");

buttonPanel = new JPanel();
buttonPanel.add(changeImage);

changeImage.addActionListener((e) -> {

ip = new ImagePanel("new_image.jpg");
ip.setVisible(true);


});


this.add(buttonPanel);
this.add(ip);
this.setVisible(true);

}

}

为什么ActionListener中的方法不更新JFrame Hauptfenster中的ip组件?

共有1个答案

柳胜
2023-03-14

当您执行ip=new ImagePanel(“new_image.jpg”);时,您正在创建一个与当前布局无关的全新ImagePanel。你可以。

remove(ip);
ip = new ImagePanel("new_image.jpg");
add(ip);
repaint();

另一种方法是更改缓冲的图像。

将以下方法添加到图像面板中。

public void loadImage(String dateiname) {
    try {
        bf = ImageIO.read(new File(dateiname));


    } catch (IOException e) {
        e.printStackTrace();
    }
}
ip.loadNewImage("new_image.jpg");
ip.repaint();
@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(bf.getScaledInstance(300,200,1),0,0,null );
}

这样,透明度将得到正确的处理。

 类似资料:
  • 我正在尝试将此 JPanel 添加到 JFrame 中,但我看不到他。当我创建新的 java 类并自己制作这个框架时,一切都很好。 来自JFrame表单的代码。 来自 JPanel 的代码: 来自Java类的代码。 我想不出区别在哪里。有人能帮我吗?

  • 我试图添加一个imagepanel,将JPanel扩展到另一个JPanel。这对我来说不太好。图像面板的绘制功能在Jpanel中不会被调用,但在JFrame中可以正常工作。任何想法或帮助都将不胜感激。

  • 我正在创建一个TicTacToe游戏。我把所有带有ActionListeners的后端放在按钮上,将按钮添加到面板,设置框架等等。 然而,当我运行程序时,我的JPanel似乎没有添加到JFrame中。我试过使用不同的布局,仔细检查是否确实放置了。为所有内容添加行,之前的所有帖子似乎都指向了我认为已经涵盖的内容。 如果这真的很直接,我提前道歉。 谢谢你的帮助。

  • 我一直在使用JFrame进行我的项目,但遇到了一个问题。这是我的代码: 还有,这是我的主要。java: 我想做的是向面板添加文本字段和标签。但是,当我运行此代码时,它会显示:结果 如果我在框架中添加标签和文本字段,效果很好。你能帮我解决这个问题吗?非常感谢你。

  • 当用户单击时,我想将不同的添加到我的。 面板必须根据用户单击的按钮进行更改。这是我的代码的一部分: 我该怎么解决这个问题?

  • 问题内容: 简而言之,有一个简单的java swing应用程序,其中包含JFrame和其中的某些组件。组件之一是一个JPanel,可以根据用户操作将其替换为另一个JPanel。 那么,做这种事情的正确方法是什么?我试过了 但这行不通。你有什么建议? 问题答案: 你的用例对于CardLayout来说似乎很完美。 在卡片布局中,你可以在同一位置添加多个面板,但是一次只能显示或隐藏一个面板。