java项目显示小,只有在调整窗口大小后才会显示Java项目

I have 2 JPanels in a frame. The first panel contains java items like buttons etc. The two buttons I added appears but the JSpinner appear just after I resize the window. I guess this will happen also with other items I will add. How could I solve this problem?

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JSpinner;

import javax.swing.SpinnerListModel;

import javax.swing.SpinnerNumberModel;

public class StartingPoint {

static JFrame window;

static DrawingArea draw;

static JButton b1, b2;

static JPanel userInt;

static JSpinner gravitySpinner;

public static void main(String[] args) {

window = new JFrame("Ball");

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

window.setSize(600, 400);

window.setLayout(new BorderLayout());

window.setVisible(true);

draw = new DrawingArea();

window.add(draw, BorderLayout.CENTER);

userInt = new JPanel();

window.add(userInt, BorderLayout.NORTH);

b1 = new JButton("Start");

b2 = new JButton("aaa");

b1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

draw.setUp();

}

});

userInt.add(b1);

userInt.add(b2);

SpinnerNumberModel gravityModel = new SpinnerNumberModel(.9, .1, 2, .1);

gravitySpinner = new JSpinner(gravityModel);

userInt.add(gravitySpinner);

}

}

解决方案

You're adding components to the GUI after calling setVisible(true) on the JFrame and that's backwards since you're rendering the GUI before anything has been added, and so it makes sense that things added later won't be displayed until all is repainted.

Instead, first add all your components, and only then render the GUI by calling setVisible(true) on the JFrame.

Edit

Also, you'll want to avoid calling setSize(...) on anything but instead let components size themselves using their preferredSizes and by calling pack() on the JFrame prior to displaying it with setVisible(true).

Edit 2

For example:

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JSpinner;

import javax.swing.SpinnerNumberModel;

import javax.swing.SwingUtilities;

public class StartingPoint {

private DrawingArea draw;

private JButton b1, b2;

private JPanel userInt;

private JSpinner gravitySpinner;

private JPanel mainPanel = new JPanel();

public StartingPoint() {

mainPanel.setLayout(new BorderLayout());

draw = new DrawingArea();

mainPanel.add(draw, BorderLayout.CENTER);

userInt = new JPanel();

mainPanel.add(userInt, BorderLayout.NORTH);

b1 = new JButton("Start");

b2 = new JButton("aaa");

b1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

draw.setUp();

}

});

userInt.add(b1);

userInt.add(b2);

SpinnerNumberModel gravityModel = new SpinnerNumberModel(.9, .1, 2, .1);

gravitySpinner = new JSpinner(gravityModel);

userInt.add(gravitySpinner);

}

public JPanel getMainPanel() {

return mainPanel;

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

JFrame window = new JFrame("Ball");

window.add(new StartingPoint().getMainPanel());

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

window.pack();

window.setLocationRelativeTo(null);

window.setVisible(true);

}

});

}

}

class DrawingArea extends JPanel {

private static final int PREF_W = 600;

private static final int PREF_H = 400;

public void setUp() {

// TODO finish

}

@Override

public Dimension getPreferredSize() {

return new Dimension(PREF_W, PREF_H);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值