Java JFrame布局:标题和2个文本区域

Java JFrame布局:标题和2个文本区域,java,swing,jframe,layout-manager,jtextarea,Java,Swing,Jframe,Layout Manager,Jtextarea,我一直试图为我的编程语言编写一个基本的IDE,但我对JFrames没有太多经验。我试图设置它,使窗口有一个主标题,然后在它下面有两个文本区域。我可以把标题全部整理好;窗口中只有3个标签居中。但我无法让这两个文本区域正常工作。到目前为止,我只试过一个,我已经看到了很多错误的东西。每当我调整窗口大小时,它不会停留在标题下(这是一个方框布局),而是在标题旁边。我还希望这样,当窗口大小改变时,文本区域的大小会增加。这是我到目前为止的代码(这只有一个文本区域) JFrame frame=newjframe

我一直试图为我的编程语言编写一个基本的IDE,但我对JFrames没有太多经验。我试图设置它,使窗口有一个主标题,然后在它下面有两个文本区域。我可以把标题全部整理好;窗口中只有3个标签居中。但我无法让这两个文本区域正常工作。到目前为止,我只试过一个,我已经看到了很多错误的东西。每当我调整窗口大小时,它不会停留在标题下(这是一个方框布局),而是在标题旁边。我还希望这样,当窗口大小改变时,文本区域的大小会增加。这是我到目前为止的代码(这只有一个文本区域)

JFrame frame=newjframe(“DotDotIO”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的FlowLayout());
框架。设置首选尺寸(新尺寸(800600));
框架设置最小尺寸(新尺寸(600450));
Box titleText=Box.createHorizontalBox();
JLabel title=新JLabel(“DotDotIO”);
title.setFont(title.getFont().deriveFont(64.0f));
JLabel版本=新的JLabel(“Luke Carr创建的1.0版”);
JLabel标语=新的JLabel(“充分的潜力
最低限度的知识”); titleText.add(版本); titleText.添加(标题); titleText.添加(标语); titleText.setAlignmentX(frame.getWidth()/2); Box inputContent=Box.createHorizontalBox(); JTextArea代码=新的JTextArea(35,65); code.setEditable(true); 代码.订单(空); 输入内容。添加(代码); 框架。添加(标题文本); frame.add(输入内容); frame.pack(); frame.setLocationRelativeTo(空); frame.setVisible(true);
我目前有它的设置,使文本区域有一个固定的大小,但我想它的设置,使左边的文本区域有一个65%的屏幕宽度,而右边的文本区域占15%的屏幕,与5%的利润任一侧和5%的利润在两者之间。最后一点需要注意的是,我的语言目前解释代码的方式是通过一个文件,然后它在每一行中循环。在左侧文本区域键入所有代码时,我如何才能做到这一点

目前我拥有:


很抱歉问了这么多问题。虽然我已经做Java很长时间了,但JFrames从未真正出现过,我对它们非常陌生。

框布局在重新调整组件大小时没有提供太多的灵活性。这是一个类似问题的链接。您可能需要尝试其他布局管理器


在重新调整组件大小时,长方体布局没有提供太多的灵活性。这是一个类似问题的链接。您可能需要尝试其他布局管理器


您可能应该首先将所有内容放入JPanel并将其添加到框架中,而不是直接将所有内容添加到框架中

JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS))
...
frame.getContentPane().add(mainPanel);
我给了BoxLayout一个Y_轴的对齐方式,以便组件从上到下。那么,如何并排显示两个标题呢?将另一个JPanel嵌套在
主面板中

JPanel info = new JPanel();
info.setLayout(new FlowLayout(FlowLayout.RIGHT, 50, 10));

JLabel version = new JLabel("<html>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Version 1.0<br>Created by Luke Carr</html>");
info.add(version);  

JLabel slogan = new JLabel("<html>Full Potential<br>Minimal Knowledge</html>");
info.add(slogan);

mainPanel.add(info);
如果您只想在版本号和标语周围加上边框,请按相同方式设置
info
的边框

对于最后一个问题:要逐行阅读代码,请使用code.getText()并使用String.split()将其拆分,如前所述

我重写了代码并更改了一些设置:

import java.awt.FlowLayout;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class Main
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("DotDotIO");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

        JPanel title = new JPanel();

        JLabel header = new JLabel("<html><span style='color: teal;'>DotDotIO</span></html>");
        header.setFont(header.getFont().deriveFont(64.0F));

        title.add(header);

        mainPanel.add(title);
        mainPanel.add(Box.createVerticalStrut(10));

        JPanel info = new JPanel();
        info.setLayout(new FlowLayout(FlowLayout.RIGHT, 50, 10));

        JLabel version = new JLabel("<html>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Version 1.0<br>Created by Luke Carr</html>");
        info.add(version);  

        JLabel slogan = new JLabel("<html>Full Potential<br>Minimal Knowledge</html>");
        info.add(slogan);

        mainPanel.add(info);
        mainPanel.add(Box.createVerticalStrut(20));

        JPanel codePanel = new JPanel();

        JTextArea code = new JTextArea(25, 65);
        codePanel.add(code);

        mainPanel.add(codePanel);

        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setVisible(true);
    }
}
导入java.awt.FlowLayout;
导入javax.swing.BorderFactory;
导入javax.swing.Box;
导入javax.swing.BoxLayout;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextArea;
公共班机
{
公共静态void main(字符串[]args)
{
JFrame=新的JFrame(“DotDotIO”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel=新的JPanel();
mainPanel.setLayout(新的BoxLayout(mainPanel,BoxLayout.Y_轴));
mainPanel.setBorder(BorderFactory.createEmptyByOrder(10,10,10,10));
JPanel title=新的JPanel();
JLabel头=新的JLabel(“DotDotIO”);
header.setFont(header.getFont().deriveFont(64.0F));
标题.添加(标题);
主面板。添加(标题);
主面板。添加(框。创建垂直支柱(10));
JPanel info=新的JPanel();
信息设置布局(新的FlowLayout(FlowLayout.RIGHT,50,10));
JLabel版本=新的JLabel(“Luke Carr创建的1.0版”);
信息添加(版本);
JLabel标语=新的JLabel(“充分的潜力
最低限度的知识”); 添加信息(标语); 主面板。添加(信息); 主面板。添加(框。创建垂直支柱(20)); JPanel codePanel=新的JPanel(); JTextArea代码=新的JTextArea(25,65); codePanel.add(代码); 添加(代码面板); frame.getContentPane().add(主面板); frame.pack(); frame.setVisible(true); } }
如果我误解了你的问题,请评论。我希望这有帮助

---编辑----------------


FlowLayout的工作方式是将组件放置在特定方向上,直到到达窗口边缘;然后它“点击return”并将组件放置在第一行组件下。这就是两个标签的对齐方式,如果屏幕太小,它们可以垂直对齐。

您可能应该首先将所有内容放入JPanel并将其添加到框架中,而不是直接将所有内容添加到框架中

JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS))
...
frame.getContentPane().add(mainPanel);
我给了BoxLayout一个Y_轴的对齐方式,以便组件从上到下。那么,如何并排显示两个标题呢?将另一个JPanel嵌套在
主面板中

JPanel info = new JPanel();
info.setLayout(new FlowLayout(FlowLayout.RIGHT, 50, 10));

JLabel version = new JLabel("<html>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Version 1.0<br>Created by Luke Carr</html>");
info.add(version);  

JLabel slogan = new JLabel("<html>Full Potential<br>Minimal Knowledge</html>");
info.add(slogan);

mainPanel.add(info);
如果您只想在版本号和标语周围加上边框,请按相同方式设置
info
的边框

对于最后一个问题:要逐行阅读代码,请使用code.getText()并使用String.split()将其拆分,如前所述

我重写了代码并更改了一些设置