2010-12-12 6 views
4

저는 TextField 및 TextArea에 수직 스크롤 막대를 추가하려고합니다. ScrollPane을 사용하고 있으며 기본적으로 수직/수평 스크롤 막대를 만들어야합니다.JScrollBar 수직/수평 설정 문제 - Java Swing

문제점 : 보이지 않는 데이터를 보려면 수직 스크롤 막대가 필요합니다. 시작 부분에 수직 스크롤바가 나타나지만 데이터가 증가하면 수직 스크롤바가 수평 스크롤바로 변경됩니다. 또한 TextField가 사라지고 해당 위치에 가로 스크롤 막대 만 나타납니다. 경계를 어떻게 설정했는지는 알지만 경계를 변경하려고 시도 했으므로 TextField로 완전히 끝내게됩니다.

내 코드 :

public JTextField inputField = new JTextField(); 

public JTextArea talkArea = new JTextArea(); 

public JScrollPane inputFieldScroll = new JScrollPane(inputField); 

public JScrollPane talkAreaScroll = new JScrollPane(talkArea); 
     talkArea.setEditable(false); 

    talkArea.setBackground(Color.white); 

    talkAreaScroll.setBounds(new Rectangle(TALK_LEFT, TALK_TOP, TALK_WIDTH, TALK_HEIGHT));  

    this.getContentPane().add(talkAreaScroll, null); 

    //set input area 

     inputField.setBackground(Color.white); 

    inputField.setBounds(new Rectangle(INPUT_LEFT, INPUT_TOP, INPUT_WIDTH, INPUT_HEIGHT)); 

    inputFieldScroll.setVerticalScrollBar(new JScrollBar()); 

    inputFieldScroll.setBounds(new Rectangle(INPUT_LEFT, INPUT_TOP, INPUT_WIDTH, INPUT_HEIGHT)); 

질문 :

이 수직 스크롤 막대 남아 내가 그렇게 설정해야 할 몇 가지 매개 변수가 있습니까? 데이터가 거대한 라인이되면 입력 스크롤 막대가 전체 입력 필드를 차지하는 이유는 무엇입니까? 시작시 적절한 수직 스크롤바로 나타납니다.

감사의 말.

감사합니다.

+0

스크롤? – khachik

+0

작고 컴파일 가능한 실행 가능한 예제를 작성하고 게시 할 수 있습니까? 또, JScrollPane 자신이 아닌, JScrollPane의 JViewport의 적절한 사이즈를 설정하면 (자) 발생합니다. –

답변

3

아래에 제가 위에서 언급 한 작은 컴파일 가능한 코드 스 니펫이 있습니다. 나는 절대 위치 지정을 사용해서는 안되며 오히려 레이아웃 관리자를 사용해야한다는 것에 동의합니다. JTextField 용의 수평 스크롤 바를 절대적으로 필요로하는 경우는, JTextField 생성자를 사용해, 항상 표시되도록 (듯이)하는 방법이 있습니다. 즉, 예를 들어

 JScrollPane inputPane = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_NEVER, 
        JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

, JTextField로에

import java.awt.*; 
import javax.swing.*; 

public class FuSwing1b extends JPanel { 
    private static final int TA_ROWS = 25; 
    private static final int TA_COLS = 60; 
    private JTextField inputField = new JTextField(); 
    private JTextArea talkArea = new JTextArea(TA_ROWS, TA_COLS); 

    public FuSwing1b() { 
     talkArea.setEditable(false); 
     talkArea.setFocusable(false); 
     talkArea.setBackground(Color.white); 
     //talkArea.setPreferredSize(new Dimension(TALK_WIDTH, TALK_HEIGHT)); 

     JScrollPane talkPane = new JScrollPane(talkArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
        JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     JScrollPane inputPane = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_NEVER, 
        JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

     int gap = 10; 
     setLayout(new BorderLayout(gap, gap)); 
     add(talkPane, BorderLayout.CENTER); 
     add(inputPane, BorderLayout.SOUTH); 
     setBorder(BorderFactory.createEmptyBorder(gap , gap, gap, gap)); 
    } 

    private static void createAndShowUI() { 
     JFrame frame = new JFrame("FuSwing1b"); 
     frame.getContentPane().add(new FuSwing1b()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
+2

스크롤 막대가 제대로 작동하게하려면 텍스트 영역의 기본 크기를 절대로 지정해서는 안됩니다. 텍스트 영역의 기본 크기가 스크롤 영역의 크기보다 클 경우 스크롤 막대가 나타납니다. 텍스트 영역을 추가 한 다음 텍스트를 추가해도 원하는 크기에는 아무런 영향을주지 않습니다. – camickr

+0

제안 및 수정 주셔서 감사합니다! 물론 위의 내용을 반영하기 위해 위의 게시물을 편집합니다 .. –

+0

안녕하세요 .. (inputField, JScrollPane. VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 스크롤 창에 대한 설정이 있지만 차이는 없었습니다. 데이터가 텍스트 필드의 크기를 초과하면 가로 창 가져 오기가 끝났습니다. ( – JJunior

1

경계로 재생하지 마십시오. 레이아웃 관리자를 사용하면 걱정할 필요가 없습니다.

JTextField textField = new JTextField(10); 

이 10 자 이상을 보유 할 텍스트 필드를 만듭니다 :

당신이 좋아하는 텍스트 필드 사용 무언가를 창조

. 문자 수가 텍스트 필드의 표시 너비를 초과하면 오른쪽/왼쪽 화살표 키를 사용하여 나머지 문자를 볼 수 있습니다. 그것은 내가 본 모든 응용 프로그램에서 사용하는 일반적인 UI입니다. 가로 스크롤 막대를 사용하여 사용자 고유의 UI를 만들지 마십시오. 사용자는 익숙하지 않습니다. 당신이 사용하여 만들 수있는 텍스트 영역

:

JTextArea textArea = new JTextArea(5, 30); 
JScrollPane scrollPane = new JScrollPane(textArea); 

텍스트 5 행 영역 및 행 당 약 30 문자를 만들 수 있습니다.

"레이아웃 관리자를 사용하여 프레임에 텍스트 필드와 스크롤 패널을 추가 한 다음 프레임을 패킹하십시오. 레이아웃 관리자는 구성품에 가장 적합한 크기를 결정합니다. 스크롤 막대는 텍스트를 추가 할 때 자동으로 텍스트 영역에 나타나며 텍스트는 5 줄을 초과합니다.

+0

어떤 이유로 든 응답을 기권 할 수 없습니다. : –