当前位置: 首页 > 面试题库 >

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

锺离德庸
2023-03-14
问题内容

我在一个框架中有2个JPanels。第一个面板包含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);
}
}

问题答案:

您需要 调用setVisible(true)JFrame 之后
向GUI添加组件,这是向后的,因为在添加任何东西之前渲染GUI都是有意义的,因此以后添加的所有东西都需要重新粉刷才显示。

取而代之的是,首先添加所有组件,并且只有 然后 通过调用渲染GUI setVisible(true)上的JFrame。

编辑
此外,你要避免调用setSize(...)上的任何东西,而是让自己的组件使用他们preferredSizes并通过调用大小pack()与显示它之前的JFrame中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);
   }

}


 类似资料:
  • 我刚开始使用JavaFX,问题是,在更改场景后,并非所有组件都被显示。例如,我有一个GridPane,它将被添加到边框中心,一个标签将被添加到边框底部。但是在我更改场景后,这个标签不会显示,只有在调整大小后才有效。 以下是一个简单的最小、完整和可验证的示例:

  • 窗口大小,我们可以非常方便的使用width、height调整,但是如何知道 width和height是一个问题? 在 Window 操作系统中,假如我们想要缩放,我们通常会把鼠标移动到窗口的右边栏,和底部边栏,以及右下边栏。 而且在不同的边栏,鼠标呈现的样式也是不一样的。当我们在右边栏的时候我们可以通过cursor: e-resize;模拟鼠标样式。 在底部边栏我们可以通过cursor: s-re

  • #include <stdio.h> void fun1(void) { int i = 0; i++; i = i * 2; printf("%d\n", i); } void fun2(void) { int j = 0; fun1(); j++; j = j

  • 我正在尝试构建一个包含6个窗格(作为父级添加到GridPane布局中)的简单Java项目。我必须在开始时设置窗口大小,并通过参考根布局的宽度和高度,设法将它们均匀地拆分。 但我想要他们调整大小,因为我改变了窗口的大小(使用鼠标,现在他们得到固定的大小)。 下面是我的代码:

  • 问题内容: 我了解,当您添加/删除组件时,需要然后单击。但是,我正在更改多边形的状态。最初显示图像,但是当我按左右键时,图像不会移动。如果我移动窗口,则gui将更新。为什么当我按下按键时它没有更新? 问题答案: 在听众之后打电话。 另外,我建议使用KeyBindings而不是

  • 问题内容: 我有以下JQuery代码: 唯一的问题是,这仅在首次加载浏览器时有效,我是否还希望在调整窗口大小时进行检查? 有任何想法吗? 问题答案: 这是一个使用jQuery,javascript和css处理调整大小事件的示例。 (如果您只是通过调整大小来设置样式(媒体查询),最好的方法是CSS) [ CSS javascript jQuery 如何停止调整大小的代码执行如此频繁! 这是绑定到调整