最白目*_*最白目 6 java layout user-interface swing
frame_ref = new Frame("Login");
mainPanel_ref = new Panel();
buttonPanel_ref = new Panel();
grid_ref = new GridLayout(4,2);
frame_ref.setSize(300,120);
frame_ref.setVisible(true);
email_ref = new TextField();
password_ref = new JPasswordField();
mainPanel_ref.setLayout(grid_ref);
mainPanel_ref.add(new Label("E-Mail"));
mainPanel_ref.add(email_ref);
mainPanel_ref.add(new Label("Passwort"));
mainPanel_ref.add(password_ref);
mainPanel_ref.add(submitLogin_ref);
mainPanel_ref.add(fehlerMeldung_ref);
frame_ref.add(mainPanel_ref);
Run Code Online (Sandbox Code Playgroud)
我在上面用Java设置了一个视图.窗口完全为空,但在拖放其大小后,将显示所有元素.有人知道如何解决这个问题吗?
Har*_*Joy 11
通话frame_ref.setVisible(true);后frame_ref.add(mainPanel_ref);.
这里发生的是:你通过调用显示框架frame_ref.setVisible(true);,然后在其中添加元素.所以你得到一个空框架.然后,当您拖动或调整大小时,它会重新绘制,您可以看到元素.
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");
}
Run Code Online (Sandbox Code Playgroud)
JDialog或JOptionPane而非一个JFrame.GridLayoutsetLocation() 可能会换掉:
setLocationRelativeTo(Component). setLocationByPlatform(true)(1.6+).