gpt4 book ai didi

java.awt : Second TextArea is not shown

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:21 24 4
gpt4 key购买 nike

我想了解 Java.awt 是如何工作的(我们需要创建一个没有 GUI 编辑器的 GUI)

以下代码不显示 2 个 TextAreas:

Frame fr = new Frame("Parser");
Panel buttons = new Panel();
Panel inputText = new Panel();
Panel outputText = new Panel();
String here = new String ("Insert code here...");
TextArea input = new TextArea(here, 9, 96, TextArea.SCROLLBARS_VERTICAL_ONLY);
TextArea output = new TextArea(here, 9,96,TextArea.SCROLLBARS_VERTICAL_ONLY);

public Window(){
fr.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
fr.dispose();
}
}
);

fr.setSize(700, 400);
fr.setLocation(200,100);
fr.setResizable(false);

fr.add(buttons);
fr.add(inputText);
fr.add(outputText);

buttons.setBounds(new Rectangle(0,0,700,60));
buttons.setBackground(new Color(200,200,200));

inputText.setBounds(new Rectangle(0,60,700,170));
inputText.setBackground(new Color(255,255,255));
inputText.add(input);

outputText.setBounds(new Rectangle(0,230,700,170));
outputText.setBackground(new Color(200,200,200));
outputText.add(output);

}

得到的结果:

Window with only 1 text area

预期结果:

enter image description here

最佳答案

您的代码不遵守您的容器所使用的布局管理器。我相信 AWT 框架默认使用 BorderLayout(编辑:是的,根据 Frame API 。建议:

  • 通常避免将 AWT 用于 Swing,它具有更强大的功能和灵 active ,尽管它也显示出它的年龄,只是不如 AWT。
  • 阅读并巧妙地使用布局管理器来为您完成繁重的工作。在这里,BoxLayout 似乎可以为您提供帮助。
  • 避免使用空布局。是的,这可以为您提供对当前代码的快速简便的修复,但它会导致创建非常不灵活的 GUI,虽然它们在一个平台上看起来不错,但在大多数其他平台或屏幕分辨率上看起来很糟糕,而且很难实现更新和维护。
  • 避免设置任何组件的边界、尺寸或位置,再次让组件及其容器的布局管理器为您设置尺寸。


例如:

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

public class MyWindow extends JPanel {
private static final int ROWS = 10;
private static final int COLS = 50;
private static final String[] BUTTON_NAMES = { "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday" };
private static final int GAP = 3;
private JTextArea inputTextArea = new JTextArea(ROWS, COLS);
private JTextArea outputTextArea = new JTextArea(ROWS, COLS);

public MyWindow() {
JPanel buttonPanel = new JPanel(new GridLayout(1, 0, GAP, 0));
for (String btnName : BUTTON_NAMES) {
buttonPanel.add(new JButton(btnName));
}
outputTextArea.setFocusable(false);
outputTextArea.setEditable(false);

setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
add(buttonPanel);
add(putInTitledScrollPane(inputTextArea, "Input Text"));
add(putInTitledScrollPane(outputTextArea, "Output Text"));
}

private JPanel putInTitledScrollPane(JComponent component,
String title) {
JPanel wrapperPanel = new JPanel(new BorderLayout());
wrapperPanel.setBorder(BorderFactory.createTitledBorder(title));
wrapperPanel.add(new JScrollPane(component));
return wrapperPanel;
}

private static void createAndShowGui() {
MyWindow mainPanel = new MyWindow();

JFrame frame = new JFrame("MyWindow");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

显示为:

enter image description here

在更改或增强 GUI 时,布局管理器的使用让您更加轻松。例如,由于我使用 COL 常量设置我的 JTextArea 的宽度,如果我更改 COL 常量,整个 GUI 都会变宽,甚至是按钮和按钮 JPanel,因为布局管理器正在处理所有大小调整。使用您的代码,您必须手动更改添加到 GUI 的每个组件的宽度,这很容易产生错误。

关于java.awt : Second TextArea is not shown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25959676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com