将 JTextArea 添加到 JFrame
Posted
技术标签:
【中文标题】将 JTextArea 添加到 JFrame【英文标题】:Adding JTextArea to 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
请看一下答案,我希望这能消除疑虑:-)
【参考方案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 对我不起作用。 你很受欢迎,保持微笑:-)以上是关于将 JTextArea 添加到 JFrame的主要内容,如果未能解决你的问题,请参考以下文章
JTextArea 到 ArrayList<String> 的行