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