java框架重印不起作用

标签 java swing

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;


public class sample {

    JTextField field=new JTextField(10);
    JPanel panel=new JPanel();
    JFrame frame=new JFrame();
    String message;

    public sample()
    {
        frame.setSize(500, 500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        field.setEditable(true);
        JButton button=new JButton("press here");
        ActionListener listener=new action();
        button.addActionListener(listener);
        panel.add(field);
        panel.add(button);
        frame.add(panel);

    }

    public void getMessage()
    {
        JTextField f=new JTextField(10);
        f.setText(message);
        JPanel p=new JPanel();
        p.add(f);
        frame.add(p);
        frame.repaint();  <-- problem here
    }

    class action implements ActionListener
    {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            message=field.getText();
            frame.remove(panel);
            getMessage();
        }

    }
}

//问题是frame在getMessage方法中没有调用repaint方法。所以,我必须最小化窗口来解决这个问题。他们还有其他方法来解决这个问题吗?

最佳答案

问题是您向可见 GUI 添加了一个组件。默认情况下,所有组件的大小均为 (0, 0),因此无需绘制任何内容。

您真正需要做的是调用布局管理器,以便确定组件的大小/位置。

基本代码应该是:

panel.add(...);
panel.revalidate(); // to invoke the layout manager
panel.repaint(); // to repaint components

在 JDK7 及更高版本中,您还可以在框架上执行 revalidate()/repaint()。

关于java框架重印不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833264/

相关文章:

java - 调用gdb调试java程序

java - GWT 将点击处理程序添加到面板和元素

java - 采用字符串的不可见 ActiveX

java - 为 JButton 自定义有点复杂的样式

java - 如何将 JTable 列的大小调整为字符串长度?

java - paintComponent 有时只调用

java - 没有鼠标的一天(Java 键盘快捷键)

java - 用 Java 重用正在运行的进程 ||斯卡拉

java - 我的 JSpinner 不更改也不接受我对其所做的任何更改

java - 如何在 Java/Groovy 中为 Azure API(Api 管理)生成 SAS token ?