2015-04-30 3 views
3
package Input; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.ScrollPaneConstants; 

public class ProgramEditor2 { 
    JFrame frame; 
    JPanel contactListPanel; 
    ArrayList<JButton> program; 

    public ProgramEditor2() { 
     initialize(); 
    } 

    ActionListener al = new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      LineEditor.main((JButton) arg0.getSource(),program,contactListPanel); 
     } 
    }; 

    public void initialize() { 
     frame = new JFrame(); 
     frame.setSize(471, 298); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 
     frame.setVisible(true); 
     frame.getContentPane().setLayout(new BorderLayout()); 

     program = new ArrayList<JButton>(); 

     // Set layout for contactListPane 
     contactListPanel = new JPanel(); 
     contactListPanel.setLayout(new GridLayout(15, 1)); // 15 rows, 1 column 
     contactListPanel.setMinimumSize(new Dimension(471, 298)); 
     contactListPanel.setPreferredSize(new Dimension(471, 298)); 
     contactListPanel.setMaximumSize(new Dimension(471, 298)); 
     for (int i = 0; i < 1; i++) { 
      JButton button = new JButton(); 
      button.addActionListener(al); 
      contactListPanel.add(button); 
     } 
     JScrollPane scrollPane = new JScrollPane(contactListPanel); 
     scrollPane 
       .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     frame.getContentPane().add(scrollPane, BorderLayout.CENTER); 

    } 

    public static void main(String[] args) { 
     new ProgramEditor2(); 
    } 
} 

Я пытаюсь добавить JLabel над scrollpanel и два JButtons ниже it.I считают, что проблема заключается в том, что я устанавливаю расположение кадров в BorderLayout в line 57. Как я могу решить проблему?Добавление Свинг элементов в JFrame с BorderLayout и существующих JScrollPane

+1

'frame.add (новый JLabel ("Hello"), BorderLayout.NORTH)' ;? – MadProgrammer

ответ

3

Начало имея более близкий взгляд на How to Use BorderLayout

Я пытаюсь добавить JLabel над scrollpanel

frame.add(new JLabel("Hello"), BorderLayout.NORTH); 

и два JButtons под ним

Используйте подход «составной компоновки», используя diffe арендовать контейнер с другим менеджером компоновки, который отвечает требованиям, предъявляемым к внутренним компонентам, а затем добавить этот контейнер в родительский контейнер, например

JButton btn1 = ...; 
JButton btn2 = ...; 
JPanel buttons = new JPanel(); 
buttons.add(btn1); 
buttons.add(btn2); 

frame.add(buttons, BorderLayout.SOUTH); 

Боковые ноты:

  • Вместо frame.setSize(471, 298);, я d рекомендуем использовать JFrame#pack, но я сделал бы это только после того, как вы установили базовый интерфейс.
  • frame.getContentPane().setLayout(null); немного бессмысленно
  • frame.setVisible(true); следует назвать последним, после того, как вы установили интерфейс, в противном случае некоторые компоненты могут не отображаться
  • Избегайте использования etMinimumSize, setPreferredSize, setMaximumSize, они могут негативно повлиять на макеты, если вы» не осторожны. См. Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? для более подробных обсуждений. Если вы хотите изменить способ JScrollPane работ, а затем использовать интерфейс Scrollable вместо
+0

Спасибо, это было очень полезно –

+0

Составные схемы довольно распространены, поэтому потратить время на его использование стоит – MadProgrammer

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