经过几个小时的刮伤我的后脑后,我决定问你们!
代码是:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.io.*;
import javax.swing.*;
public class JTask {
JButton button = new JButton();
JFrame frame = new JFrame();
JTextArea area = new JTextArea();
JScrollPane scrollPane = new JScrollPane();
JTask() throws IOException{
frame.setBounds(100, 100, 1000, 700);
frame.setLayout(null);
area.setFont(new Font("monospaced", Font.PLAIN, 14));
area.setBounds(5,25,972,500);
scrollPane.add(area);
scrollPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setBounds(5,25,972,500);
scrollPane.setViewportView(area);
scrollPane.setEnabled(true);
scrollPane.setVisible(true);
scrollPane.repaint();
scrollPane.revalidate();
area.setVisible(true);
frame.add(scrollPane);
frame.add(area);
frame.setVisible(true);
try {
String line;
Process p = Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
area.append(line);
area.append("\n");
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args []) throws IOException{
JTask task = new JTask();
}
}
我为一个混乱的代码道歉,如果有什么可以做得更好,但我希望你明白我只是一个初学者,试图理解Java编程语言的机制,并沉入Java的世界。 提前谢谢大家!
答案 0 :(得分:2)
为什么你使用两个JScrollPane
?只需在JScrollPane
中添加JFrame
,在JTextArea
添加JScrollPane
。
示例代码:
public JTask() throws IOException {
JFrame frame = new JFrame();
JTextArea area = new JTextArea();
area.setFont(new Font("monospaced", Font.PLAIN, 14));
JScrollPane scrollPane = new JScrollPane(area);
frame.add(scrollPane);
...
// set text in JTextArea
...
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
值得阅读How to Use Text Areas上的 Swing Tutorial 以了解更多内容并找到更多详细示例。
在程序结束后,请尝试Java7 - The try-with-resources Statement关闭资源。
首先不要使用null
布局。有很多布局管理器专门用于此目的。
最后调用frame.setVisible(true)
以确保在JFrame中添加所有内容
使用SwingUtilities.invokeLater()或EventQueue.invokeLater()确保EDT已正确初始化。
答案 1 :(得分:2)
您可以尝试使用此代码
JScrollPane scrollPane = new JScrollPane(area);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
在这种情况下不必使用视口,同样关注在帧可见之前重新验证和重新绘制。
您需要的只是frame.getContentPane().add(scrollPane);