Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 空间在GUI中没有正确排列_Java_User Interface_Textarea - Fatal编程技术网

Java 空间在GUI中没有正确排列

Java 空间在GUI中没有正确排列,java,user-interface,textarea,Java,User Interface,Textarea,我的JTextArea的输出有一个奇怪的问题。我的程序要做的是通过GUI接受输入字符串,将其保存为图像,并将每个像素的值设置为>0到“”。这完全可以在控制台中找到,但是当它被打印到JTextArea时,空格的大小似乎是“”的一半。我知道这个问题不是我的代码的实际问题,而是JTextAreas的一些内置问题。我将包括下面的代码,但我觉得唯一相关的一行是在末尾:tA.setText(output) import java.awt.*; 导入java.awt.event.ActionEvent; 导入

我的JTextArea的输出有一个奇怪的问题。我的程序要做的是通过GUI接受输入字符串,将其保存为图像,并将每个像素的值设置为>0到“”。这完全可以在控制台中找到,但是当它被打印到JTextArea时,空格的大小似乎是“”的一半。我知道这个问题不是我的代码的实际问题,而是JTextAreas的一些内置问题。我将包括下面的代码,但我觉得唯一相关的一行是在末尾:tA.setText(output)

import java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.font.FontRenderContext;
导入java.awt.font.GlyphVector;
导入java.awt.font.TextLayout;
导入java.awt.geom.Rectangle2D;
导入java.awt.image.buffereImage;
导入java.awt.image.graster;
导入javax.swing.*;
公共类Project4扩展JPanel实现ActionListener{
公共静态项目4 p=新项目4();
公共静态JTextField输入=新的JTextField(“Java 2D”);
公共静态JTextArea tA=新JTextArea();
公共静态void main(字符串[]args){
JFrame=新JFrame(“项目4”);
框架。设置尺寸(600400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel面板=新的JPanel();
面板。添加(p,边框布局。中心);
输入。设置列(40);
面板。添加(输入);
JButton print=新JButton(“print”);
print.addActionListener(p);
面板。添加(打印);
增补(tA);
框架。添加(面板);
frame.setVisible(true);
}
@凌驾
已执行的公共无效操作(操作事件e){
Font f=新字体(“Times new Roman”,Font.BOLD,20);
FontRenderContext frc=新FontRenderContext(null、false、false);
GlyphVector gv=f.createGlyphVector(frc,input.getText());
矩形2D边界=gv.getLogicalBounds();
TextLayout tL=新的TextLayout(input.getText(),f,frc);
浮动上升=tL.getAscent();
BuffereImage b=新的BuffereImage((int)bounds.getWidth(),
(int)bounds.getHeight(),buffereImage.TYPE_BYTE_BINARY);
Graphics2D g2=b.createGraphics();
g2.矢量(gv,0,上升);
g2.setPaint(颜色为黑色);
g2.drawString(input.getText(),input.getAlignmentX(),input.getAlignmentY());
字符串输出=”,行=”;
int spaceCount=0;
光栅r=b.getRaster();
int[]i=新的int[1];
对于(int y=0;y<(int)bounds.getHeight()-1;y++){
对于(int x=0;x<(int)bounds.getWidth()-1;x++){
r、 获取像素(x,y,i);
int像素=i[0];
如果(像素>0){
行+=“*”;
}否则{
行+=“”;
spaceCount++;
}
}
if(spaceCount!=line.length())
输出+=行+“\n”;
spaceCount=0;
第“”行;
}
系统输出打印(输出);
tA.setText(输出);
}
}

**谢谢你的编辑,快蜗牛

JTextArea使用的字体使用可变宽度字体。为了确保您的空格和字符占用相同的空间,您需要使用一个,如Courier New。您可以在
JTextArea
上设置它,并使用它对图示符进行光栅化。这就是您执行的
操作所需的全部内容

public void actionPerformed(ActionEvent e) {
    Font f = new Font("Courier New", Font.BOLD, 20);
    tA.setFont(f);
或者,您可以为字体创建一个
static
变量,只将其分配给
JTextArea
一次,然后在执行的
操作中重新使用它

public void actionPerformed(ActionEvent e) {
    Font f = new Font("Courier New", Font.BOLD, 20);
    tA.setFont(f);
它在控制台中工作的原因是因为它使用单间距字体,这在控制台输出中非常常见


我应该注意,用于光栅化图示符的字体不必与用于
JTextArea
中输出的字体匹配。您可以使用非等距字体来呈现图示符,但是
JTextArea
中类似ASCII的输出应该使用等距字体。

尝试使用类似Courier的字体。除非我可以更改JTextArea的字体,否则我不确定它是否是该字体。如果您看到的话,在控制台中它是好的,但在GUI中它是坏的。我想它们可能是不同的字体,但这是我可以单独在JTextArea中设置的吗?如此简单的修复。。。我应该看看JTextArea的文档,哈哈,非常感谢!愚蠢的,深夜的错误!