2012-04-08 4 views
0

Когда я запускаю эту программу, окно блокирует кнопки в панели2, когда я использую setSize для определения размера окна.Не все компоненты, отображающие

Кроме того, если я использую frame.pack() вместо setSize(), все компоненты находятся на одной горизонтальной линии, но я пытаюсь их получить, так что компоненты панели 1 находятся на одной линии, а компоненты panel2 находятся на одной под ними.

Может ли кто-нибудь объяснить подробно ответы на обе эти проблемы?

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

public class Exercise16_4 extends JFrame{ 
    // FlowLayout components of top portion of calculator 
    private JLabel jlbNum1 = new JLabel("Number 1"); 
    private JTextField jtfNum1 = new JTextField(4); 
    private JLabel jlNum2 = new JLabel("Number 2"); 
    private JTextField jtfNum2 = new JTextField(4); 
    private JLabel jlbResult = new JLabel("Result"); 
    private JTextField jtfResult = new JTextField(8); 

    // FlowLayout Components of bottom portion of calculator 
     private JButton jbtAdd = new JButton("Add"); 
    private JButton jbtSubtract = new JButton("Subtract"); 
    private JButton jbtMultiply = new JButton("Multiply"); 
    private JButton jbtDivide = new JButton("Divide"); 


    public Exercise16_4(){ 
     JPanel panel1 = new JPanel(); 
     panel1.setLayout(new FlowLayout(FlowLayout.CENTER, 3, 3)); 
     panel1.add(jlbNum1); 
     panel1.add(jtfNum1); 
     panel1.add(jlNum2); 
     panel1.add(jtfNum2); 
     panel1.add(jlbResult); 
     panel1.add(jtfResult); 

     JPanel panel2 = new JPanel(); 
     panel2.setLayout(new FlowLayout(FlowLayout.CENTER, 3, 10)); 
     panel1.add(jbtAdd); 
     panel1.add(jbtSubtract); 
     panel1.add(jbtMultiply); 
     panel1.add(jbtDivide); 

     add(panel1, BorderLayout.NORTH); 
     add(panel2, BorderLayout.CENTER); 
    } 

    public static void main(String[] args){ 
     Exercise16_4 frame = new Exercise16_4(); 

     frame.setTitle("Caculator"); 
     frame.setSize(400, 200); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //frame.setResizable(false); 
     frame.setVisible(true); 
    } 
} 
+0

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

ответ

5

Вы проблема, вероятно, опечатка в том, что вы добавляете все компоненты ПАНЕЛЬ1 и ни к panel2:

// you create panel2 just fine 
    JPanel panel2 = new JPanel(); 
    panel2.setLayout(new FlowLayout(FlowLayout.CENTER, 3, 10)); 

    // but you don't use it! Change below to panel2. 
    panel1.add(jbtAdd); 
    panel1.add(jbtSubtract); 
    panel1.add(jbtMultiply); 
    panel1.add(jbtDivide); 

Добавьте кнопки panel2, а затем вызвать pack() перед тем setVisible(true) , Не задавайте размер графического интерфейса.

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