gpt4 book ai didi

java - 如果我将 JPanel 和 JFrame 子类化,为什么我的 JFrame 保持为空?

转载 作者:搜寻专家 更新时间:2023-11-01 04:03:30 24 4
gpt4 key购买 nike

我正在尝试为我的 Java 应用程序编写自定义 JFrame 和 JPanel。目前,我只想在屏幕中间有一个带有开始按钮的 JPanel。所以,这是我的代码:

package gui;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

@SuppressWarnings("serial")
public class SubitizingFrame extends JFrame implements KeyListener {

public SubitizingFrame() {
super("Subitizing");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(this);
add(new LaunchPanel());

pack();
setVisible(true);
}

public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_F5)
System.out.println("F5 pressed");
}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}
}

这是我的面板:

package gui;

import instructions.Settings;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class LaunchPanel extends JPanel implements ActionListener {

private JButton startButton;

public LaunchPanel() {
int width = Settings.getScreenSizeX(), height = Settings.getScreenSizeY();
setPreferredSize(new Dimension(width, height));
setLayout(null);
startButton = new JButton("Start");
startButton.setLocation((width/2) - (startButton.getWidth()/2), (height/2) - (startButton.getHeight()/2));
add(startButton);
}

public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

}
}

但是当应用程序启动时,我什么也没看到。只是一个灰色的大屏幕。

最佳答案

不要使用空布局。如果您简单地使用 JPanel 的默认布局管理器(即 FlowLayout),带有“自动”的 JButton 将被放置在中心。此外,为了将 JFrame 放在屏幕中间,调用 setLocationRelativeTo(null) .


因为很难说出“屏幕”是什么意思,这个例子展示了如何在 JFrameJPanel 中将 JButton 居中>,然后居中显示在显示器上。

public final class CenterComponentsDemo {

public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
createAndShowGUI();
}
});
}

private static void createAndShowGUI(){
final JFrame frame = new JFrame("Center Components Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ButtonPane());
frame.setSize(new Dimension(300, 100)); // Done for demo
//frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

private static class ButtonPane extends JPanel{
public ButtonPane(){
super();
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
setBackground(Color.PINK);
final JButton button = new JButton("Start");
button.setAlignmentX(Component.CENTER_ALIGNMENT);
add(Box.createVerticalGlue());
add(button);
add(Box.createVerticalGlue());
}
}
}

enter image description here

关于java - 如果我将 JPanel 和 JFrame 子类化,为什么我的 JFrame 保持为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7071934/

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