2014-02-10 4 views
0

У меня есть программа, которая предназначена для создания и тестирования пользовательского интерфейса. Текущая настройка состоит в том, что на ней отображается большой черный экран с текстом и поле ввода для пользователя внизу, а также полоса прокрутки с правой стороны. У меня все работает так, как я хочу, кроме того, что прокрутка абсолютно не будет прокручиваться. Он есть, но не кажется вообще связанным с текстовым полем. Вы можете нажимать кнопки на панели, но они ничего не делают. Любая помощь будет оценена!Прокрутка не прокрутка

Вот код, который я до сих пор:

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) { 

    } 
} 

ответ

1

Там нет ничего прилагается к виду панели скроллинга, так что нет ничего для того, чтобы прокрутить ...

Вы должны поставить компонент посмотреть на свиток, используя что-то вроде scrollPane.setViewportView(...);

Вы можете взглянуть на How to use scroll panes еще несколько деталей

В коде есть много вещей, которые меня волнуют ...

Thread.sleep В среде GUI всегда вызывает беспокойство, учитывая, что это может привести к тому, Использование бесконечных циклов по той же причине.

Использование KeyListener, который просто выполняет ту же функцию в ActionListener

Тот факт, что вы добавляете txt и inputField и scrollPane в двух различных контейнерах и txt фактически дополняя panel ...

Вы можете потратить некоторое время на чтение

+0

Спасибо! Я смог решить эту проблему. Мне не нужен JLabel или ха-ха. – SeanTommy

Смежные вопросы