2015-09-14 7 views
2

Делаю программу, в которой JPanel имеет два компонента JTextField и JLabel .И что JPanel используя GridBadLayout в it.And я сделать метод GridBagConstraints которые добавляют компоненты в it.but, что делает метод не работает с JPanel instance.But Работа с JFrame. Я хочу исправить этот метод с помощью JPanel, но не знаю, как это сделать.
Код:Java: JPanel GridBagLayout вопрос

public class A extends JFrame { 

    private final GridBagLayout layout; 

    private final GridBagConstraints gbc; 

    private JPanel p; 
    private JLabel label1; 
    private JTextField field1; 

    public A() { 

     super("Frame"); 

     layout = new GridBagLayout(); 
     gbc = new GridBagConstraints(); 
     p = new JPanel(); 
     p.setLayout(layout); 
     gbc.gridy = 0; 
     label1 = new JLabel("Enter Name"); 
     p.addConstraints(label1); 

     gbc.gridx = 1; 
     field1 = new JTextField(15); 

     setSize(300, 200); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    // Method for GridBag Component Constraints 
    private void addConstraints(Component com) { 

     layout.setConstraints(com, gbc); 
     add(com); 

    } 

Главная Метод

public class MainMethod { 

    public static void main(String[] args) { 

     A frame = new A(); 

    } 
    } 

ответ

4

add(com); добавляет компонент к 'это', который является JFrame, а не JPanel. Кроме того, уже существует метод , предоставляемый на Java, add(Component comp, Object constraints).

Вместо использования метода addConstraints, вы можете попробовать это:

p.add(label1, gbc); 

Рядом с этим я отсутствует this.add(p);.

Edit:

Если вы хотите просто вызвать метод этого addConstraints(Component comp) обновление:

// Method for GridBag Component Constraints 
private void addConstraints(Component com) { 
    p.add(com, gbc); 
} 

Таким образом, конструктор может выглядеть следующим образом:

public A() { 
    super("Frame"); 

    p = new JPanel(); 
    this.add(p); 
    p.setLayout(new GridBagLayout()); 
    gbc = new GridBagConstraints(); 

    gbc.gridy = 0; 
    label1 = new JLabel("Enter Name"); 
    addConstraints(label1); 

    gbc.gridx = 1; 
    field1 = new JTextField(15); 
    addConstraints(field1); 

    setSize(300, 200); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setVisible(true); 
} 
+0

Я знаю, что я может сделать это с таким образом, но есть способ, которым я могу улучшить свой метод для работы с панелью –

+0

'p.add (label1, gbc);' работает с JPanel. Если вы хотите, чтобы внутри вашего метода 'addConstraints', просто замените текущий контент для' p.add (com, gbc); '. Теперь вы можете вызвать его в конструкторе следующим образом: 'addConstraints (label1);' –

+0

не могли бы вы заменить свой ответ тем, что –