gpt4 book ai didi

java - 在 JTextArea 上使用 setBounds 或 setLocation 不起作用

转载 作者:行者123 更新时间:2023-12-03 22:55:28 25 4
gpt4 key购买 nike

我正在使用以下代码将 JTextArea 添加到我的 JPanel:

commentTextArea.setLineWrap(true);
commentTextArea.setWrapStyleWord(true);
commentTextArea.setVisible(true);
this.add(commentTextArea);
commentTextArea.setBounds(0, 0, 100, 100);
//commentTextArea.setLocation(0, 0);

每当我使用 setLocation(0,0) 时,JTextArea 都不会移动。它始终位于屏幕的顶部中间,而不是 (0,0)。 setBounds(0,0,100,100) 也是如此,但高度和宽度是以这种方式设置的,而不是位置。这是为什么?

完整代码

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class UMLEditor {

public static void main(String[] args) {
JFrame frame = new UMLWindow();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(30, 30, 1000, 700);
frame.getContentPane().setBackground(Color.white);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

class UMLWindow extends JFrame {
Canvas canvas = new Canvas();

private static final long serialVersionUID = 1L;

public UMLWindow() {
addMenus();
}

public void addMenus() {

getContentPane().add(canvas);

JMenuBar menubar = new JMenuBar();

JMenuItem newTextBox = new JMenuItem("New Text Box");
newTextBox.setMnemonic(KeyEvent.VK_E);
newTextBox.setToolTipText("Exit application");
newTextBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
canvas.addTextBox();
}
});

menubar.add(newTextBox);

setJMenuBar(menubar);

setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}

class Canvas extends JPanel {

JTextArea commentTextArea = new JTextArea(10, 10);

public Canvas() {
this.setOpaque(true);

}

public void addTextBox() {

commentTextArea.setLineWrap(true);
commentTextArea.setWrapStyleWord(true);
commentTextArea.setVisible(true);
commentTextArea.setLocation(0, 0);
this.add(commentTextArea);
commentTextArea.setBounds(0, 0, 100, 100);

revalidate();
repaint();
}
}

最佳答案

通过 setBounds(...) 设置组件的位置仅适用于空布局,即

container.setLayout(null);` 

但无论如何,我建议您不要这样做,因为这会导致 GUI 非常不灵活,虽然它们在一个平台上看起来不错,但在大多数其他平台或屏幕分辨率上看起来很糟糕,而且很难更新并保持。相反,您需要研究和学习布局管理器,然后嵌套 JPanel,每个 JPanel 都使用自己的布局管理器来创建在所有操作系统上看起来都不错的令人愉悦的复杂 GUI。

设置 JTextArea 的大小还有第二个隐患——如果这样做,它将无法在 JTextAreas 所在的通常位置 JScrollPane 中正常工作,因为它无法在添加文本行时正确扩展。所以它加倍地让你永远不应该设置 JTextArea 的大小。

关于java - 在 JTextArea 上使用 setBounds 或 setLocation 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26598678/

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