【问题标题】:Stack JTextField/JTextArea on top of ImageIcon在 ImageIcon 上堆叠 JTextField/JTextArea
【发布时间】:2014-02-20 16:09:45
【问题描述】:

各位程序员,大家好,关于一个简单的 Java 程序的快速问题。我正在尝试为我的程序创建一个登录屏幕。我目前正在使用包含动画 gif 的 ImageIcon。我想在这个动画 gif 之上有多个 JTextFields 或 JTextAreas(以更容易者为准),这样我就可以输入具有非常好的背景的信息。这可能吗?如果是这样,我将如何开始?

更新代码

class PaintPane extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(background.getImage(), 0, 0, null);
        add(enterUsername);//enterUsername is a JTextField
        add(enterPassword);//enterPassword is a JPasswordField
        repaint();
        revalidate();
    }

}

【问题讨论】:

    标签: java swing jtextfield animated-gif imageicon


    【解决方案1】:

    扩展 JPanel 并覆盖 paintComponent() 以在该 JPanel 中绘制背景。将您的 JTextFields 和 JTextAreas(两者都同样“简单”)添加到该 JPanel,就像您添加任何其他 JPanel 一样。

    推荐阅读:http://docs.oracle.com/javase/tutorial/uiswing/painting/

    更新代码后编辑:您不应将添加 JTextField 的代码放在 paintComponent() 方法中。这将在每次绘制时向您的 JPanel 添加一个新的 JTextField,这很多!相反,将 PaintPane 与任何其他 JPanel 一样对待,并且只要将组件添加到 JFrame 中,只需将其添加一次。比如:

    public class Test{
       public static void main(String... args){
          JFrame frame = new JFrame("Testing");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
          //this JPanel paints its own background
          JPanel myPanel = new PaintPane();
    
          frame.add(myPanel);
          myPanel.add(new JTextField("text field");
          myPanel.add(new JButton("button"));
    
          frame.setSize(500, 500);
          frame.setVisible(true);
       }
    }
    

    【讨论】:

    • 非常感谢凯文。我按照您所说的进行了操作,几乎可以完美运行。为了让 TextField 显示出来,我必须使用 repaint() 和 revalidate()。现在,使用这些可以超快地重置 TextFields,以至于我无法输入任何内容。有什么想法吗?
    • 你能发布一个MCVE 显示你更新的代码吗?听起来你做错了什么;您应该能够在不调用 repaint() 或 revalidate() 的情况下添加 JTextField。 (除非您的组件由于某种原因已经可见,即使那样也不应该超过一次)
    • 好的,我用将图像/面板绘制到框架的代码更新了它。
    • 您不应该将添加 JTextField 的代码放在 paintComponent() 方法中。这将在每次绘制时向您的 JPanel 添加一个新的 JTextField,这很多!相反,将 PaintPane 与任何其他 JPanel 一样对待,并将组件添加到它只是 一次,每当您将它添加到 JFrame 时。
    • 如果您出于某种原因扩展 JFrame 可能没问题。重要的是不要在paintComponent() 中添加组件,因为这真的把事情搞砸了。很高兴你把它解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2017-01-18
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2018-11-14
    • 2011-01-18
    相关资源
    最近更新 更多