gpt4 book ai didi

Java 项仅在调整窗口大小后出现

转载 作者:太空狗 更新时间:2023-10-29 22:43:28 24 4
gpt4 key购买 nike

我在一个框架中有 2 个 JPanel。第一个面板包含按钮等 java 项目。我添加的两个按钮出现,但 JSpinner 在我调整窗口大小后出现。我想我将添加的其他项目也会发生这种情况。我该如何解决这个问题?

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);
}
}

最佳答案

您在 JFrame 上调用setVisible(true)之后向 GUI 添加组件,这是倒退的,因为您在添加任何内容之前呈现 GUI,因此,稍后添加的内容在全部重新绘制之前不会显示是有道理的。

相反,首先添加所有组件,然后通过调用 JFrame 上的 setVisible(true) 呈现 GUI。

编辑
此外,您将希望避免在任何事情上调用 setSize(...),而是让组件使用它们的 preferredSizes 调整自己的大小,并通过在 JFrame 之前调用 pack()setVisible(true) 显示它。

编辑2
例如:

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);
}

}

关于Java 项仅在调整窗口大小后出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8770617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com