2017-01-24 8 views
0

Я столкнулся с проблемой с моей простой программой Java. Здесь вы можете увидеть, что я сделал:JButton заставляет все на моей панели исчезнуть

public class første_prosjekt { 
    int numbers[] = new int[9]; 
    int total; 

public første_prosjekt(){  
    frame(); 
} 

public void frame(){   
    JFrame frame = new JFrame(); 
    frame.setVisible(true); 
    frame.setSize(600, 600); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel panel = new JPanel(); 
    panel.setLayout(null); 
    JButton b1 = new JButton("1"); 
    JButton b2 = new JButton("2"); 
    JButton b3 = new JButton("3"); 
    JButton b4 = new JButton("4"); 
    JButton b5 = new JButton("5"); 
    JButton b6 = new JButton("6"); 
    JButton b7 = new JButton("7"); 
    JButton b8 = new JButton("8"); 
    JButton b9 = new JButton("9"); 
    JButton b0 = new JButton("="); 

    b1.setBounds(125, 250, 75, 75); 
    b2.setBounds(250, 250, 75, 75); 
    b3.setBounds(375, 250, 75, 75); 
    b4.setBounds(125, 350, 75, 75); 
    b5.setBounds(250, 350, 75, 75); 
    b6.setBounds(375, 350, 75, 75); 
    b7.setBounds(125, 450, 75, 75); 
    b8.setBounds(250, 450, 75, 75); 
    b9.setBounds(375, 450, 75, 75); 
    b0.setBounds(50, 50, 50, 50); 

    b1.addActionListener(new ActionListener(){   
     public void actionPerformed(ActionEvent e){ 
      JOptionPane.showMessageDialog(null, "THE BUTTON WORKED FLAWLESSLY"); 
      JOptionPane.showMessageDialog(null, "Second message"); 
      total = +1; 
     } 
    }); 

    b2.addActionListener(new ActionListener(){   
     public void actionPerformed(ActionEvent e){ 
      JOptionPane.showMessageDialog(null, "2 added"); 
      JOptionPane.showMessageDialog(null, total); 
     } 
    }); 

    b3.addActionListener(new ActionListener(){   
     public void actionPerformed(ActionEvent e){ 
      JOptionPane.showMessageDialog(null, "3 added"); 
     } 
    }); 

    b4.addActionListener(new ActionListener(){   
     public void actionPerformed(ActionEvent e){ 
      JOptionPane.showConfirmDialog(null, "4"); 
     } 
    }); 

    panel.add(b1); 
    panel.add(b2); 
    panel.add(b3); 
    panel.add(b4); 
    panel.add(b5); 
    panel.add(b6); 
    panel.add(b7); 
    panel.add(b8); 
    panel.add(b9); 
    frame.add(panel);  
} 

public static void main(String[] Args){ 
    new første_prosjekt();  
} 

}

Это может быть плохой набор, но это не главное. Когда я добавил JButton b4, все на панели исчезнет. Также по какой-то причине после того, как я добавил немного, я должен скомпилировать его пару раз, прежде чем он сработает. И да, я новичок в этом.

Надеюсь получить помощь!

  • Спасибо :)
+0

Избегайте использования макетов «нуль», идеальные макеты пикселей являются иллюзией в современном дизайне ui. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше и больше времени на исправление. – MadProgrammer

+1

Возьмите 'frame.setVisible (true);' move to under 'frame .add (панель); ' – MadProgrammer

ответ

1

распашные компоненты не должны быть изменены вне Event диспетчерское Thread. Редактирование кода в вашей основной функции, как это:

SwingUtilities.invokeLater(() -> new første_prosjekt()); 

Кроме того, избегайте использования null -layout. Вместо этого используйте подходящий менеджер компоновки.

+0

Это рекомендация по определению, которую OP должен выполнять и внедрять, но она не решит основную проблему, и использование диспетчера компоновки может даже сделать ее более последовательной – MadProgrammer