2016-12-19 3 views
0

Кнопка выхода закрывает весь экран, что не так ???Кнопка выхода закрывает весь экран

границы, которые я устанавливаю, покрывают текст. Выйдите так, чтобы границы были x-280, y-385, ширина-70, высота-20.

Изображение кнопки охватывающих весь кадр

The Image of the button covering the whole Frame

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

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

@SuppressWarnings({ "unused", "serial" }) 
public class FinalBlowzXC extends JFrame{ 

    public JLabel bgmainmenu; 
    public JButton start; 
    public JButton exit; 
    public static JPanel mainmenu; 
    public static JPanel login; 

    public static void main(String []args) 
    { 
     new FinalBlowzXC().setVisible(true); 
    } 

    public FinalBlowzXC() 
    { 
     super("Final Blowz Xchanged"); 
     setSize(640,480); 
     setResizable(false); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     bgmainmenu = new JLabel(); 
     start = new JButton(); 
     exit = new JButton(); 

     mainmenu=new JPanel(); 

     bgmainmenu.setIcon(new ImageIcon(getClass().getResource("/FF-XV.jpg"))); 
     bgmainmenu.setBounds(0,0,640,480); 
     add(bgmainmenu); 
     add(start); 
     start.setBounds(280, 360, 70, 20); 
     start.setBorder(null); 
     start.setBorderPainted(false); 
     start.setContentAreaFilled(false); 
     start.setOpaque(false); 
     start.addActionListener(new Start()); 
     exit.setBounds(280, 385, 70, 20); 
     add(exit); 
     exit.setBorder(null); 
     exit.setBorderPainted(false); 
     exit.setContentAreaFilled(false); 
     exit.setOpaque(false); 
     exit.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) 
      { 
       System.exit(0); 
      } 
     });  

    } 

    } 

ответ

3

менеджер компоновки по умолчанию панели содержимого фрейма является BorderLayout. Когда вы добавляете компоненты в BorderLayout и не указываете ограничение, компонент переходит на CENTER. Только последний добавленный компонент может отображаться в CENTER.

Так что, если вы хотите отображать несколько кнопок, вам нужно вложить панели в рамку. Что-то вроде:

JPanel buttonPanel = new JPanel(); 
buttonPanel.add(start); 
buttonPanel.add(exit); 
add(buttonPanel, BorderLayout.PAGE_START); 

Прочитайте раздел из свинга учебника по Using Layout Managers для получения более подробной информации и примеров о том, как BorderLayout работах.

1

панель контента JFrame «s имеет BorderLayout как менеджер компоновки по умолчанию, когда вы что-то добавить к нему с add(Component comp), он добавляется к центру, и занимает все пространство.

Установка границ не имеет значения, кроме случаев, когда контейнер имеет нулевой макет (setLayout(null)).

С нулевым макетом ваши оценки учитываются, но очень рекомендуется выбрать настоящий менеджер макетов, соответствующий вашим потребностям.

См. Здесь: A Visual Guide to Layout Managers

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