我有一个专门用于制作和测试用户界面的程序。当前的设置是它显示一个带有文本的大黑屏,一个用于在底部输入用户的框和一个右侧的滚动条。我有一切按照我想要的方式工作,除了滚动条绝对不会滚动。它就在那里,但似乎与textarea完全无关。您可以按下栏上的按钮,但它们不会执行任何操作。任何帮助将不胜感激!
这是我到目前为止的代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class RandomTest extends JFrame implements KeyListener{
JPanel panel = new JPanel();
JScrollPane scrollPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JFrame frame = new JFrame();
static JTextArea txt;
static JTextField inputField;
static String text;
static String choice;
static boolean enter = false;
Container positioner = frame.getContentPane();
RandomTest(){
text = "";
txt = new JTextArea(text);
txt.setEditable(false);
inputField = new JTextField("");
txt.setBackground(Color.black);
txt.setFont(new Font("Courier New", Font.PLAIN, 18));
txt.setForeground(Color.lightGray);
inputField.setBackground(Color.black);
inputField.setFont(new Font("Courier New", Font.PLAIN, 18));
inputField.setForeground(Color.lightGray);
panel.add(txt);
panel.add(inputField);
//Dimension d = new Dimension(500,500);
//scrollPane.setPreferredSize(d);
panel.add(scrollPane);
frame.add(panel);
frame.setSize(500,500);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
positioner.setLayout(new BorderLayout());
positioner.add(inputField, BorderLayout.PAGE_END);
positioner.add(scrollPane, BorderLayout.EAST);
positioner.add(txt, BorderLayout.CENTER);
positioner.setBackground(Color.black);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
inputField.addKeyListener(this);
}
public static void main(String[] arg){
new RandomTest();
println("Please enter the letter 'm'");
for(;;){
println("/\n/\n/\n/\n/\n/\n/\n/\n");
if(input().equals("m")){
println("Thank you.");
}else{
println("Try again.");
}
}
}
public static void println(String line){
text += line + "\n";
txt.setText(text);
}
public static String input(){
for(;;){
if(enter == true){
enter = false;
return choice;
}else{
try {
Thread.sleep(10);
} catch (InterruptedException e) {
if(enter == true){
enter = false;
return choice;
}
}
}
}
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
choice = inputField.getText();
inputField.setText("");
enter = true;
try{
Thread.currentThread().interrupt();
}catch(Exception E){
}
}
}
@Override
public void keyTyped(KeyEvent e) {
}
}
答案 0 :(得分:1)
滚动窗格的视图没有任何附加内容,因此无法滚动...
您需要使用scrollPane.setViewportView(...);
您可能需要查看How to use scroll panes了解更多详情
你的代码中有很多东西让我担心......
GUI环境中的 Thread.sleep
始终受到关注,因为这实际上可能会导致应用程序无响应。出于同样的原因使用无限循环。
使用KeyListener
只是执行与ActionListener
您要将txt
和inputField
以及scrollPane
添加到两个不同的容器txt
,这实际上正在补充panel
...
您可能希望花一些时间阅读