2013-07-04 22 views
0

我问a question之前,如何使JTextField从下面插入其文本。现在我遇到了一些代码问题。我编辑了一下,只是为了测试。下面是我现在使用的代码:JScrollPane的行为与JTextArea异常

public class BaseTextAreaDemo { 

private static JTextArea textArea; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
      } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
      } 

      final JFrame frame = new JFrame("Base JTextArea App"); 
      final JPanel panel = new JPanel(); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setLayout(new BorderLayout()); 
      panel.setLayout(new BorderLayout()); 
      JPanel textAreaPanel = getBaseTextArea(); 
      JScrollPane scrollPane = new JScrollPane(textAreaPanel) { 
       public Dimension getPreferredSize() { 
        return new Dimension(300, 230); 
       } 
      }; 

      panel.add(scrollPane, BorderLayout.SOUTH); 
      JTextField textField = new JTextField(); 
      textField.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        textArea.append(arg0.getActionCommand() + "\n"); 

       } 

      }); 
      frame.add(panel, BorderLayout.CENTER); 
      frame.add(textField, BorderLayout.SOUTH); 
      frame.pack(); 
      frame.setLocationByPlatform(true); 
      frame.setVisible(true); 
     } 

     private JPanel getBaseTextArea() { 
      textArea = new JTextArea(); 
      textArea.setLineWrap(true); 
      textArea.setWrapStyleWord(true); 
      textArea.append("bla bla bla\n"); 
      textArea.append("new text here"); 
      JPanel panel = new JPanel(new BorderLayout()); 
      panel.setBackground(textArea.getBackground()); 
      panel.setBorder(textArea.getBorder()); 
      textArea.setBorder(null); 
      panel.add(textArea, BorderLayout.SOUTH); 

      return panel; 
     } 

    }); 

} 

我只是增加了一个文本框,因为我还需要一个在节目中,我需要这,这是有用的需要加入更多行这种方式。

现在的问题是,当我运行这个程序,并添加行直到出现一个垂直滚动条时,水平线也会出现。我已经想到,你可以关掉它,但是一些文字掉在屏幕之外。此外,当您将框架变宽并且将其恢复为正常大小时,水平滚动条将保持与加宽窗口相同的尺寸。

Some pictures of the problem

另一个问题是,滚动的速度在JTextField中非常低。

回答

0

尝试设置textarea的PreferedSize以相同的乌尔JScrollPane的:

textArea.setPreferedSize(Dimension(300, 230)); 

可以藏汉只是禁用水平滚动条:

scrollPane.setHorizonalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 

您可以设置Scrollspeed这样的:

scrollPane.getVerticalScrollBar().setUnitIncrement(16); 

我可以解决这个问题:它的面板你添加到滚动窗格。直接添加的JTextArea到滚动和卧式酒吧仅在需要时显示:

textArea = new JTextArea(); 
JScrollPane scrollPane = new JScrollPane(textArea); 
+0

我不想禁用水平滚动条,因为那样文字就会掉到屏幕上。文本框仍然会比它显示的区域大。 – Creator13

+0

@CaspervanBattum然后,只需将textField设置为常量尺寸值即可。 – Tdorno

+0

@CaspervanBattum检查我的帖子编辑 –

0
如果要完全去除水平滚动条则

我建议你调用这行代码在你JScrollPane

scrollPane.setHorizonalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);