【问题标题】:Adding JTextArea to JFrame将 JTextArea 添加到 JFrame
【发布时间】:2013-06-28 03:18:21
【问题描述】:

如果我有 1 个主类和 2 个子类

  • 子类 1:公共类 JPanel1 扩展 JPanel {....正确初始化}
  • 子类 2:公共类 JTextArea1 扩展 JTextArea {...正确初始化}

为什么我可以做 jframe1.add(new JPanel1()) 而不能做 jframe1.add(new JTextArea1())?对于正确初始化的 JFrame jframe1 = new JFrame();?

我的目标是将数据同时输出到 jpanel 和 jtextarea

【问题讨论】:

  • 究竟为什么需要继承这两个类来完成这项工作?为什么单靠构图是不够的?在继续之前,您需要先问这些问题... :-) 但是,如果您没有更改 JFrame 的布局,则只能在任何给定位置添加一个组件@ 987654323@。在这种情况下,两者都添加到 CENTER 位置。
  • 此外,您是否尝试为继承类中的两个组件覆盖getPreferredSize()?如果没有,那么就这样做,并让它们返回一些真正的 Dimension 对象like return (new Dimension(300, 300))
  • 把 JPanel 和 JTextArea 组合成一个类?我添加了它们,使得 jpanel 位于 layout.center 而 jtextarea 位于 layout.east
  • 请看一下答案,我希望这能消除疑虑:-)

标签: swing jframe jpanel awt jtextarea


【解决方案1】:

在我这边,您提出的问题运行良好。如果您认为,请告诉我,这不是您的意思:-)

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

public class SwingExample
{
    private CustomPanel customPanel;
    private CustomTextArea customTextArea;

    private void displayGUI()
    {
        JFrame frame = new JFrame("Swing Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout(5, 5));
        contentPane.setBorder(
                BorderFactory.createLineBorder(
                                Color.DARK_GRAY, 5));
        customPanel = new CustomPanel();
        customTextArea = new CustomTextArea();

        contentPane.add(customPanel, BorderLayout.CENTER);
        contentPane.add(customTextArea, BorderLayout.LINE_START);
        frame.setContentPane(contentPane);      
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        Runnable runnable = new Runnable()
        {
            @Override
            public void run()
            {
                new SwingExample().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}

class CustomPanel extends JPanel
{
    private static final int GAP = 5;

    public CustomPanel()
    {
        setOpaque(true);
        setBackground(Color.WHITE);
        setBorder(BorderFactory.createLineBorder(
                Color.BLUE, GAP, true));
    }

    @Override
    public Dimension getPreferredSize()
    {
        return (new Dimension(300, 300));
    }
}

class CustomTextArea extends JTextArea
{
    private static final int GAP = 5;
    public CustomTextArea()
    {       
        setBorder(BorderFactory.createLineBorder(
                Color.RED, GAP, true));
    }

    @Override
    public Dimension getPreferredSize()
    {
        return (new Dimension(100, 30));
    }
}

输出:

【讨论】:

  • 谢谢!我没有覆盖尺寸。 setPreferredSize 对我不起作用。
  • 你很受欢迎,保持微笑:-)
猜你喜欢
  • 2015-06-08
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
相关资源
最近更新 更多