【问题标题】:Scrollbar not scrolling滚动条不滚动
【发布时间】:2014-02-10 23:28:16
【问题描述】:

我有一个程序,它的设计目的只是为了制作和测试用户界面。当前的设置是它显示一个带有文本的大黑屏,底部有一个用户输入框,右侧有一个滚动条。除了滚动条绝对不会滚动之外,我已经按照我想要的方式进行了所有工作。它在那里,但似乎与 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) {

    }
}

【问题讨论】:

    标签: java jframe scrollbar jscrollpane


    【解决方案1】:

    滚动窗格的视图没有附加任何内容,因此没有任何内容可以滚动...

    你需要为滚动提供一个组件视图,使用类似scrollPane.setViewportView(...);的东西

    您可能想查看How to use scroll panes 了解更多详情

    你的代码中有很多让我担心的东西......

    Thread.sleep 在 GUI 环境中总是值得关注的,因为这实际上可能会导致您的应用程序变得无响应。出于同样的原因,使用无限循环。

    KeyListener 的使用只是执行与ActionListener 相同的功能

    您将txtinputFieldscrollPane 添加到两个不同的容器和txt 实际上是在补充panel...

    您可能想花一些时间阅读

    【讨论】:

    • 谢谢!我能够从那里解决问题。我也不需要 JLabel 哈哈。
    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多