2014-02-08 3 views
0

У меня есть программа, но я не могу совместить textfield и button в том же кадре, как в верхней textfield и ниже, что button:Java GUI JButton

Вот мой исходный код:

import java.awt.*; 
import javax.swing.*; 
public class FirstGui extends JFrame 
{ 
    JTextField texts; 
JButton button; 

    public FirstGui() 
    { 
     texts = new JTextField(15); 
     add(texts); 
     button = new JButton("Ok"); 
     add(button); 

    } 
    public static void main(String args []) 
    { 
     FirstGui gui = new FirstGui(); 
     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.setSize(200,125); 
     gui.setVisible(true); 

    } 
} 
+1

см: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html – pedromss

+1

Это всегда хорошая идея, чтобы заявить, что вы ожидать, что произойдет и что на самом деле происходит. Гораздо лучше, чем «Я не могу» или «не работает». – Behe

ответ

2

Добавить макет как FlowLayout:

public FirstGui() 
{ 
    setLayout(new FlowLayout()); 
    texts = new JTextField(15); 
    add(texts); 
    button = new JButton("Ok"); 
    add(button); 

} 

в самом начале своего конструктора, прежде чем что-либо еще.

+0

Я уже пробовал, но ошибка java.lang.error: не использовать FirstGui.setLayout() использовать FirstGui.getContentPane(). SetLayout() вместо – Batusai

+1

Не делать FirstGui.setLayout(), который не может работать , FirstGui относится к классу, а не к экземпляру. Просто напишите setLayout (новый FlowLayout()), как есть. –

+0

no Я попробовал setLayout (новый FlowLayout()); – Batusai

2

По умолчанию макет BorderLayout для JFrame. Когда вы добавляете компоненты в BorderLayout, если вы не указали их позицию BorderLayout, например BorderLayout.SOUTH, компонент будет автоматически добавлен в BorderLayout.CENTER. Тем не менее, каждая позиция может иметь только один компонент. Поэтому, когда вы добавляете texts, он добавляется к CENTER. Затем, когда вы добавляете button, он добавляется к CENTER, но texts получает выгону. Таким образом, чтобы исправить, вы можете сделать

add(texts, BorderLayout.NORTH); 
add(button, BorderLayout.CENTER); 

См Laying out Components Within a Container, чтобы узнать больше о менеджерах компоновки.


UPDATE

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

public class FirstGui extends JFrame { 

    JTextField texts; 
    JButton button; 

    public FirstGui() { 
     texts = new JTextField(15); 
     add(texts, BorderLayout.CENTER); 
     button = new JButton("Ok"); 
     add(button, BorderLayout.SOUTH); 

    } 

    public static void main(String args[]) { 
     FirstGui gui = new FirstGui(); 
     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.pack(); 
     gui.setVisible(true); 

    } 
} 
+0

не работает: ((., Пожалуйста, отредактируйте мою работу, я буду более запутанной. – Batusai

+0

См. Мой ** ОБНОВЛЕНИЕ ** –

+0

тот же java.lang.Error: cccccccccccc – Batusai

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