2015-06-25 4 views
0

Я просто создаю простой графический интерфейс для практики. Я хочу иметь несколько текстовых полей в своем JFrame, но созданный мной JTextField занимает весь фрейм. Я пробовал делать .setSize, но это не сработало.Как изменить размер JTextField в JFrame?

JFrame

public static Component textbox(String x){ 
    JLabel lbltAm= new JLabel(x); 
    JTextField tftAm = new JTextField(20); 
    lbltAm.setLabelFor(tftAm); 
    lbltAm.setFont(new Font("Serif", Font.PLAIN, 18)); 
    tftAm.setSize(10, 10); 
    return tftAm; 
} 

private static void createAndShowGUI() { 

    //Create and set up the window. 


    JFrame frame = new JFrame("Tip Calculator"); 
    //Add Textbox 
    frame.add(textbox("TipAmmount")); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setBackground(Color.gray); 
    frame.setPreferredSize(new Dimension(250, 400)); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
+0

Попробуйте создать FlowLayout и поместите JTextField и JLabel внутри макета. и добавьте свой макет в JFrame –

+0

Прохладный, я дам этот снимок. – user3769402

+0

'new Font (« Serif », Font.PLAIN, 18)' лучше всего будет 'new Font (Font.SERIF, Font.PLAIN, 18)' для проверки времени компиляции. –

ответ

0

Это потому, что вы не используете какой-либо макет, я советую использовать FlowLayout и GridBagLayout.

+1

JFrame имеет BorderLayout по умолчанию LayoutManager в API – mKorbel

0

Вместо возвращении JTextField возвращает объект Panel и добавьте JTextField и JLabel объекта в panel.You можно использовать любой макет я использовал BorderLayout

public static Component textbox(String x){ 
    JPanel panel = new JPanel(new BorderLayout()); 
    JLabel lbltAm= new JLabel(x); 
    JTextField tftAm = new JTextField(20); 
    lbltAm.setLabelFor(tftAm); 
    lbltAm.setFont(new Font("Serif", Font.PLAIN, 18)); 
    tftAm.setSize(10, 10); 
    panel.add(lbltAm, BorderLayout.NORTH); 
    panel.add(tftAm, BorderLayout.CENTER); 

    return panel; 
} 

Есть несколько макета с помощью которого вы можете макет компонентов в панели. have a look

не очень хорошая практика, чтобы добавлять компоненты непосредственно в JFrame использовать его как этот

frame.getContentPane(). Добавить (компонент)

или при использовании BorderLayout вы можете добавить например

frame.getContentPane(). добавить (compnent, BorderLayout.CENTER);

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