如何使文本区域出现在Java JFrame中?

时间:2016-06-07 00:40:43

标签: java swing jframe jbutton jtextarea

我已经在互联网上寻找解决方案,而且我似乎找不到适合我的方案......如果你想知道,我是Swing的新手。所以,这就是JButton出现的问题,但是JTextArea并没有。我不知道如何解决这个问题......帮帮我们......

public class FrameCreation
{
    public JFrame createFrame(int width, int height, String name) 
    {
        JFrame frame = new JFrame(name);
        frame.setVisible(true);
        frame.setSize(width, height);
        frame.setLayout(null);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.getContentPane().setBackground(Color.DARK_GRAY);
        return frame;
    }

    public JButton createButton(int width, int height, int xPos, int yPos, String text) 
    {
        JButton button = new JButton(text);
        button.setBounds(xPos, yPos, width, height);
        button.setBackground(Color.GRAY);
        button.setForeground(Color.WHITE);
        return button;
    }

    public JTextArea createTextArea(int width, int height, int xPos, int yPos)
    {
        JTextArea txt = new JTextArea();
        txt.setVisible(true);
        txt.setBounds(xPos, yPos, width, height);
        txt.setText("Help this poor JTextArea to appear on the frame...");
        return txt;
    }
}

public class Main 
{
    public static void main(String[] args) 
    {
        FrameCreation mainFrame = new FrameCreation();
        JFrame f = new FrameCreation().createFrame(600, 600, "My Frame");
        f.add(mainFrame.createButton(100, 40, 10, 10, "Click me!"));
        f.add(mainFrame.createTextArea(200, 200, 390, 10));
    }
}

3 个答案:

答案 0 :(得分:0)

找到你真正的问题;请不要使用frame.setLayout(null);Here是一篇解释为什么空布局不好的帖子。相反,我使用了流程布局,它按照预期的方式工作。这是代码(我把它们改成了两个类):

Main.java

import javax.swing.*;

public class Main
{
    public static void main(String[] args)
    {
        FrameCreation mainFrame = new FrameCreation();
        JFrame f = new FrameCreation().createFrame(600, 600, "My Frame");
        f.add(mainFrame.createButton(100, 40, 10, 10, "Click me!"));
        f.add(mainFrame.createTextArea(300, 300, 390, 10));
        f.setVisible(true);
    }
}

FrameCreation.java

import javax.swing.*;
import java.awt.*;

public class FrameCreation
{
    public JFrame createFrame(int width, int height, String name)
    {
        JFrame frame = new JFrame(name);
        frame.setVisible(true);
        frame.setSize(width, height);
        frame.setLayout(new FlowLayout());
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.getContentPane().setBackground(Color.DARK_GRAY);
        return frame;
    }

    public JButton createButton(int width, int height, int xPos, int yPos, String text)
    {
        JButton button = new JButton(text);
        button.setBounds(xPos, yPos, width, height);
        button.setBackground(Color.GRAY);
        button.setForeground(Color.WHITE);
        return button;
    }

    public JTextArea createTextArea(int width, int height, int xPos, int yPos)
    {
        JTextArea txt = new JTextArea();
        txt.setBounds(xPos, yPos, width, height);
        txt.setText("Help this poor JTextArea to appear on the frame...");
        return txt;
    }
}

这是输出:

enter image description here

答案 1 :(得分:0)

删除frame.setVisible(true);从FrameCreation类中,添加它f.setVisible(true);在主要方法的最后。

public static void main(String[] args) {
    FrameCreation mainFrame = new FrameCreation();
    JFrame f = new FrameCreation().createFrame(600, 600, "My Frame");
    f.add(mainFrame.createButton(100, 40, 10, 10, "Click me!"));
    f.add(mainFrame.createTextArea(200, 200, 390, 10));
    //This new line
    f.setVisible(true);     
}

答案 2 :(得分:0)

当您向可见的GUI添加组件时,您需要告诉框架重新绘制自己。

所以你需要添加:

f.revalidate();
f.repaint();

在main()方法的末尾。

但是,这不是正确的解决方案,不应该使用。你需要重新设计你的课程。

  

我是Swing的新手

此处列出的代码有太多问题。所以我建议你先阅读Swing Tutorial的Swing基础知识。

可能从How to Use Text Areas上的部分开始。 TextDemo将向您展示如何更好地构建代码,以便您:

  1. 在Event Dispatch Thread上创建Swing组件。
  2. 创建合理大小的JTextArea
  3. 使用布局管理器。
  4. pack()框架并使用setVisible(true)将所有组件添加到框架后。