gpt4 book ai didi

java - TextArea 溢出分配给它的边界以及 Borderlayout 的中心并覆盖整个窗口

转载 作者:行者123 更新时间:2023-11-29 05:31:16 25 4
gpt4 key购买 nike

所以我之前问过类似的问题并得到了我问的问题的答案,但我显然没有问正确的问题。所以,我在这里试图完成的是让文本区域只填充在 jFrame 的中心。如您所见,它被设置为边框布局,底部有按钮,顶部有标签(然后 - 在该程序的完整版本中 - 当它被替换为时将被复制到文本框架中来自按钮上的 Action 监听器的文本)

问题是,文本区域填满了整个窗口并覆盖了窗口上的所有其他组件。我尝试使用首选大小,我尝试指定列/行,我已经阅读了 docs.oracle 上的教程,尽管我想因为我仍然遇到问题,所以我可能错过了一个。

另外,我在 docs.oracle 信息中找到的偏移量注释行,将其进行文本换行是个好主意,因为它将记录所发生的事情。我尝试添加该网站上建议的所有导入,但 netbeans 仍然给我一个红色下划线,表示它们未被识别为命令。它们是否已被弃用,我是否没有正确使用它们,或者我是否缺少导入?

我知道我要求很多,但感谢您的时间和耐心等待!

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package theproblem;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.TextArea;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
*
* @author Heather
*/
public class TheProblem {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {

JFrame window2 = new JFrame();
TextArea battleLogging = new TextArea(3,10);
JScrollPane logScrollPane = new JScrollPane(battleLogging);
JLabel BattleLog = new JLabel();
JLabel p1HPLabel= new JLabel();
JLabel p2HPLabel= new JLabel();
String attack1ButtonContents = "Just an attack";
String attack2ButtonContents = "Just another attack";
JButton attack1=new JButton(attack1ButtonContents);
JButton attack2=new JButton(attack2ButtonContents);


window2.setLayout(new BorderLayout());
window2.setSize(400,400);
JPanel attackPanel = new JPanel();
attackPanel.add(attack1);
attackPanel.add(attack2);

window2.add(battleLogging, BorderLayout.CENTER);
battleLogging.setEditable(false);
logScrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
logScrollPane.setPreferredSize(new Dimension(50, 50));


//battleLogging.setLineWrap(true);
//battleLogging.setWrapStyleWord(true);


window2.add(BattleLog, BorderLayout.NORTH);
window2.add(p1HPLabel, BorderLayout.WEST);
window2.add(p2HPLabel, BorderLayout.EAST);
window2.setVisible(true);
window2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}


}

最佳答案

问题:

  • 添加任何组件 BorderLayout.CENTER 时,它会填充中心位置,无论您给它什么尺寸或首选尺寸。
  • 您甚至不应该设置尺寸。
  • 不要将 TextAreas 与 Swing 应用程序一起使用。使用 JTextAreas
  • 设置 JTextArea 的列数和行数,让它为您调整大小。
  • 不要忘记在显示之前打包您的 GUI。

例如:

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.*;

public class TheProblem2 {
private static void createAndShowGUI() {
int rows = 5;
int cols = 20;
JTextArea textArea = new JTextArea(rows, cols);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 1");
JPanel btnPanel = new JPanel(new GridLayout(1, 0, 5, 0));
btnPanel.add(button1);
btnPanel.add(button2);

JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(scrollPane);
mainPanel.add(btnPanel, BorderLayout.SOUTH);

JFrame frame = new JFrame("EG 2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

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

关于java - TextArea 溢出分配给它的边界以及 Borderlayout 的中心并覆盖整个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031287/

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