2015-08-07 6 views
1

Я пытаюсь установить размер и расположение JScrollPane в JFrame, и это JViewport является JTextArea.Как установить размер и расположение JScrollPane?

private static JFrame frame = new JFrame(); 

public static void main(String... args) { 
    frame.setTitle("Friend App"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(800, 600); 
    JTextArea textArea = new JTextArea(); 
    JScrollPane scrollPane = new JScrollPane(textArea); 
    scrollPane.setLayout(null); 
    scrollPane.setLocation(30, 30); 
    scrollPane.setSize(new Dimension(100, 100)); 
    frame.add(scrollPane); 
    textArea.append("test"); 
    frame.setVisible(true); 

} 

Что еще я должен сделать, так что я могу изменить размер и установить местоположение этого JScrollPane:

это код, я использую следующий? Я использую лучший подход здесь?

Примечание: scrollPane.setLayout(null) ничего не делает, frame.pack() не то, что я хочу.

+0

Java GUI должны работать с различными ОС, размером экрана, разрешением экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

+1

1) Чтобы получить более эффективную помощь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). 2) Обеспечить ASCII-искусство или простой рисунок * предназначенного макета GUI при минимальном размере и, если он изменен, с большей шириной и высотой. –

+0

@AndrewThompson Там бы не было CSSLayout, где я могу просто применить CSS к конкретным компонентам через XML? Или это JavaFX? –

ответ

4

ScrollPane добавляется в область содержимого JFrame, которая по умолчанию имеет BorderLayout. BorderLayout игнорирует местоположение и размер компонента.

Вы должны использовать другой LayoutManager (в качестве альтернативы вы можете использовать пустой макет для области содержимого, но это не очень хорошо).

+0

Я должен изменить компоновку JFrame вместо компонента, затем правильно? Или просто добавьте JComponent в фрейм, чтобы сохранить макет фрейма, я бы подумал, что лучше? –

+0

Да. Чтобы компонент имел желаемую позицию, установите правильную компоновку в контейнер компонента (в вашем случае панель содержимого JFrame) – StanislavL