这是我的问题.当我使用以下代码时:
Here is my problem. When i use the following code:
package xyz.lexium.giapb.ui;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ConsoleWindow extends WindowAdapter implements WindowListener, ActionListener, Runnable {
private JFrame frame;
private JTextArea textArea;
private Thread reader;
private Thread reader2;
private boolean quit;
private final PipedInputStream pin = new PipedInputStream();
private final PipedInputStream pin2 = new PipedInputStream();
public ConsoleWindow() {
frame = new JFrame("GIAPB - Console");
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 3);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 3);
frame.setSize(x, y);
textArea = new JTextArea();
textArea.setEditable(false);
JButton button = new JButton("clear");
button.setBorder(null);
button.setBackground(Color.BLACK);
button.setForeground(Color.white);
frame.getContentPane().setBackground(Color.BLACK);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER);
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.addWindowListener(this);
textArea.setBackground(Color.BLACK);
textArea.setForeground(Color.white);
textArea.setBorder(null);
frame.setVisible(true);
button.addActionListener(this);
try {
PipedOutputStream pout = new PipedOutputStream(this.pin);
System.setOut(new PrintStream(pout, true));
} catch (java.io.IOException io) {
textArea.append("Couldn't redirect STDOUT to this console
" + io.getMessage());
} catch (SecurityException se) {
textArea.append("Couldn't redirect STDOUT to this console
" + se.getMessage());
}
try {
PipedOutputStream pout2 = new PipedOutputStream(this.pin2);
System.setErr(new PrintStream(pout2, true));
} catch (java.io.IOException io) {
textArea.append("Couldn't redirect STDERR to this console
" + io.getMessage());
} catch (SecurityException se) {
textArea.append("Couldn't redirect STDERR to this console
" + se.getMessage());
}
quit = false; // signals the Threads that they should exit
// Starting two seperate threads to read from the PipedInputStreams
//
reader = new Thread(this);
reader.setDaemon(true);
reader.start();
//
reader2 = new Thread(this);
reader2.setDaemon(true);
reader2.start();
}
public synchronized void windowClosed(WindowEvent evt) {
quit = true;
this.notifyAll(); // stop all threads
try {
reader.join(1000);
pin.close();
} catch (Exception e) {
}
try {
reader2.join(1000);
pin2.close();
} catch (Exception e) {
}
System.exit(0);
}
public synchronized void windowClosing(WindowEvent evt) {
frame.setVisible(false); // default behaviour of JFrame
frame.dispose();
}
public synchronized void actionPerformed(ActionEvent evt) {
textArea.setText("");
}
public synchronized void run() {
try {
while (Thread.currentThread() == reader) {
try {
this.wait(100);
} catch (InterruptedException ie) {
}
if (pin.available() != 0) {
String input = this.readLine(pin);
textArea.append(input);
}
if (quit)
return;
}
while (Thread.currentThread() == reader2) {
try {
this.wait(100);
} catch (InterruptedException ie) {
}
if (pin2.available() != 0) {
String input = this.readLine(pin2);
textArea.append(input);
}
if (quit)
return;
}
} catch (Exception e) {
textArea.append("
Console reports an Internal error.");
textArea.append("The error is: " + e);
}
}
public synchronized String readLine(PipedInputStream in) throws IOException {
String input = "";
do {
int available = in.available();
if (available == 0)
break;
byte b[] = new byte[available];
in.read(b);
input = input + new String(b, 0, b.length);
} while (!input.endsWith("
") && !input.endsWith("
") && !quit);
return input;
}
}
它是我的控制台,但在文本区域和边框之间添加了一条白线.这个怎么去掉
It makes my console, but adds a white line between the text area and the border. How do i remove this
问题是因为 JScrollPane 也有边框.
The problem is because a JScrollPane also has a border.
在这种情况下,您可以使用以下命令将其删除:
In this case you can remove it with:
JScrollPane scroll = new JScrollPane(textArea);
scroll.setBorder(null);
并将 JScrollPane 添加到您的框架中:
And adding the JScrollPane to your frame as:
frame.getContentPane().add(textArea, BorderLayout.CENTER);
但这会移除按钮和文本区域之间的边框
But that will remove the border between the button and the text area
所以你需要在 JButton 的顶部创建一个 MatteBorder:
So you need to create a MatteBorder on the top of your JButton:
button.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.white));
所以它看起来像这样:
我忘记将运行代码的方式放在我自己的 main 方法中,因为您忘记将其添加为 MCVE:
I had forgotten to place how I ran your code in my own main method, because you forgot to add it as part of your MCVE:
它将把程序放在 事件调度线程 (EDT)
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ConsoleWindow();
}
});
}
这篇关于java JFrame中奇怪的空白的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
上传进度侦听器未触发(Google 驱动器 API)Upload progress listener not fired (Google drive API)(上传进度侦听器未触发(Google 驱动器 API))
使用 Google Drive SDK 将文件保存在特定文件夹中Save file in specific folder with Google Drive SDK(使用 Google Drive SDK 将文件保存在特定文件夹中)
Google Drive Android API - 无效的 DriveId 和 Null ResourcGoogle Drive Android API - Invalid DriveId and Null ResourceId(Google Drive Android API - 无效的 DriveId 和 Null ResourceId)
谷歌驱动api服务账户查看上传文件到谷歌驱动使Google drive api services account view uploaded files to google drive using java(谷歌驱动api服务账户查看上传文件到谷歌驱动使用java
Google Drive 服务帐号返回 403 usageLimitsGoogle Drive service account returns 403 usageLimits(Google Drive 服务帐号返回 403 usageLimits)
com.google.api.client.json.jackson.JacksonFactory;Google Drcom.google.api.client.json.jackson.JacksonFactory; missing in Google Drive example(com.google.api.client.json.jackson.JacksonFactory;Google Drive 示例