2013-03-15 2 views
2

Я хочу создать простую программу, в которой будет одна кнопка и несколько полей. Когда я планировал это в своей голове, я хотел использовать gridlayout или, по крайней мере, кнопку с первого раза, так как я учусь. Вот то, что у меня есть до сих пор, мой вопрос, к которому я приведу, - это где я помещаю свой макет сетки или устанавливаю центр выравнивания в панели, рамке или кнопке?Как центрировать объект в java

import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Normal { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("test"); 
     JButton button = new JButton("why"); 
     JPanel panel = new JPanel(); 
     JTextField field= new JTextField(); 


    //button 
    button.setSize(50, 50); 

    //Field 
    field.setSize(250, 25); 

    //Frame 
    frame.setSize(500, 500); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    frame.add(panel); 
    frame.add(field); 
    frame.add(button); 

     } 
} 
+3

Не используйте setSize, пусть менеджер компоновки позаботится об этом. Попробуйте использовать другой менеджер компоновки. GridLayout заставит компоненты заполнить доступное пространство одинаково – MadProgrammer

ответ

3

Всегда добавлять компоненты в Container в JFrame. Установите макет Container как GridLayout. Например Вы можете изменить свой код следующим образом:

import java.awt.GridLayout; 
import java.awt.Container; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Normal { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("test"); 
     JButton button = new JButton("why"); 
     JPanel panel = new JPanel(); 
     JTextField field= new JTextField(); 
     Container c = frame.getContentPane(); 
     c.setLayout(new GridLayout(3,1));//Devides the container in 3 rows and 1 column 
     c.add(panel);//Add in first row 
     c.add(button);//Add in second row 
     c.add(field);//Add in third row 
     frame.setSize(500, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     } 
} 
+0

, добавив компонент непосредственно в кадр, эквивалентно добавлению их в ContentPane. –

+0

Спасибо, это очень поможет моему обучению. – user1241388

+0

@ user1241388: Мое удовольствие. :). И если он решил вашу проблему, тогда отметьте ответ как принятый. Посмотрите здесь, чтобы узнать, как принять ответ ..http: //meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

1

В подходе, где вы расширить свой класс от JFrame, вы можете просто установить, где вы хотели бы добавить компоненты. Если у вас есть панель с ex. кнопку можно добавить следующим образом:

add(panel, BorderLayout.CENTER); 

Надеюсь, это поможет.

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