Позвоните pack()
на JFrame
после добавления компонентов. Это приведет к тому, что рамка примет наименьший размер, необходимый для отображения компонентов. Наконец, позвоните (setLocation()
(4) &) setVisible(true)
.
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
class FrameTest {
public void init() {
frame_ref = new JFrame("Login");
frame_ref.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainPanel_ref = new JPanel(new GridLayout(4,2,6,3));
mainPanel_ref.setBorder(new EmptyBorder(5,5,5,5));
email_ref = new JTextField();
password_ref = new JPasswordField();
mainPanel_ref.add(new JLabel("E-Mail"));
mainPanel_ref.add(email_ref);
mainPanel_ref.add(new JLabel("Passwort"));
mainPanel_ref.add(password_ref);
mainPanel_ref.add(new JLabel(""));
mainPanel_ref.add(new JLabel(""));
mainPanel_ref.add(submitLogin_ref);
mainPanel_ref.add(fehlerMeldung_ref);
frame_ref.add(mainPanel_ref);
//frame_ref.setSize(300,120);
frame_ref.pack();
frame_ref.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new FrameTest().init();
}
});
}
private JFrame frame_ref;
private JPanel mainPanel_ref;
private JTextField email_ref;
private JPasswordField password_ref;
private JButton submitLogin_ref = new JButton("Submit Login");
private JButton fehlerMeldung_ref = new JButton("Fehler Meldung");
}
Другие советы:
- Не смешивайте Swing с AWT. По крайней мере, не компоненты, или не до нацеливания на Java 7+.
- Компонент входа в систему часто лучше подходит для ввода
JDialog
или JOptionPane
, чем JFrame
.
- Это может быть лучше подходит для вложенного макета или другого макета, чем
GridLayout
setLocation()
может быть заменено на:
- Если вход в систему имеет родительский компонент,
setLocationRelativeTo(Component)
.
- Если вход в систему - первый видимый экран,
setLocationByPlatform(true)
(1.6 +).
- Проверьте источник на предмет других советов.
- Для более быстрой помощи, опубликуйте SSCCE .