JFrame 不显示任何内容
JFrame does not show anything
我正在尝试在 GUI 中制作 RPG 游戏,但进展并不顺利。
在我添加 JButton 之前,一切正常并显示在 window 中。我不确定添加 JButton 后发生了什么。
应该有显示在灰色区域的标题和蓝色区域的按钮。我已正常尝试 运行 和 运行 调试器,none 的文本或按钮出现。
我正在按照教程 here step-by-step 进行操作,我没有发现任何不合适的地方。 (我知道我已经更改了变量名)。
我做错了什么?我需要添加任何额外的东西吗?
import javax.swing.*;
import java.awt.*;
public class Game {
JFrame window;
Container c;
JPanel titlePanel;
JPanel startButtonPanel;
JLabel titleLabel;
JButton startButton;
Font titleFont = new Font("Cooper Black", Font.PLAIN, 90);
Font buttonFont = new Font("Cooper Black", Font.PLAIN, 32);
public static void main(String[] args) {
new Game();
}
public Game() {
//Main Window
window = new JFrame();
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setBackground(Color.BLACK);
window.setLayout(null);
window.setVisible(true);
c = window.getContentPane();
//Title Panel
titlePanel = new JPanel();
titlePanel.setBounds(100, 100, 600, 150);
titlePanel.setBackground(Color.GRAY);
titleLabel = new JLabel("TEXT RPG");
titleLabel.setForeground(Color.WHITE);
titleLabel.setFont(titleFont);
//Start Button Panel
startButtonPanel = new JPanel();
startButtonPanel.setBounds(300, 400, 200, 100 );
startButtonPanel.setBackground(Color.BLUE);
//Start Button
startButton = new JButton("START");
startButton.setBackground(Color.BLACK);
startButton.setForeground(Color.WHITE);
startButton.setFont(buttonFont);
//Add Elements to Window
titlePanel.add(titleLabel);
startButtonPanel.add(startButton);
//Add Elements to Container
c.add(titlePanel);
c.add(startButtonPanel);
}
}
我的一个朋友提出要解决这个问题。他添加了一个叫做 "extends Canvas".
的东西
这是固定版本:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Game extends Canvas{
private static final long serialVersionUID = 1L;
public static JFrame window;
public static Container c;
JPanel titlePanel,startButtonPanel;
JLabel titleLabel;
JButton startButton;
Font titleFont = new Font("Cooper Black", Font.PLAIN,90);
private static int width = 800;
private static int height = 600;
public static String title ="Blueberry's Game";
/*----------------------------------------------------------------------------------------------------*/
public static void main(String[] args){
Game game = new Game();
Game.window.setResizable(false);
Game.window.setTitle(Game.title);
Game.window.add(game);
Game.window.pack();
Game.window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Game.window.setLocationRelativeTo(null);
Game.window.setVisible(true);
}
/*----------------------------------------------------------------------------------------------------*/
public Game(){
window = new JFrame();
setPreferredSize(new Dimension(width, height));
window.getContentPane().setBackground(Color.BLACK);
c = window.getContentPane();
//////////TITLE PANEL//////////////////////
titlePanel = new JPanel();
titlePanel.setBounds(100, 100, 600, 150);
titlePanel.setBackground(Color.BLACK);
titleLabel = new JLabel("TEXT RPG");
titleLabel.setForeground(Color.WHITE);
titleLabel.setFont(titleFont);
//////////START BUTTON PANEL//////////////////////
startButtonPanel = new JPanel();
startButtonPanel.setBounds(300, 400, 200, 100);
startButtonPanel.setForeground(Color.BLUE);
//////////START BUTTON//////////////////////
startButton = new JButton("START");
startButton.setBackground(Color.BLACK);
startButton.setForeground(Color.WHITE);
//////////ADD ELEMENTS TO WINDOW//////////////////////
titlePanel.add(titleLabel);
startButtonPanel.add(startButton);
//////////ADD ELEMENTS TO CONTAINER//////////////////////
c.add(titlePanel);
c.add(startButtonPanel);
}
/*----------------------------------------------------------------------------------------------------*/
}
编辑:我也设法明白为什么 window 在我的问题中没有显示任何内容。我只需要用光标调整 window 大小。
请勿按照教您使用空布局管理器和设置边界的教程进行操作 "manually"。这不是一个好习惯。
从代码中删除所有边界设置。
而是使用 Layout Managers,这就是他们所做的,为您动态设置界限:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Game {
JFrame window;
Container c;
JPanel titlePanel;
JPanel startButtonPanel;
JLabel titleLabel;
JButton startButton;
Font titleFont = new Font("Cooper Black", Font.PLAIN, 90);
Font buttonFont = new Font("Cooper Black", Font.PLAIN, 32);
public static void main(String[] args) {
new Game();
}
public Game() {
//Main Window
window = new JFrame();
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c = window.getContentPane();
c.setBackground(Color.BLACK);
//window.setLayout(null);
//Title Panel
titlePanel = new JPanel(); //JPanel uses FlowLayout by default
//titlePanel.setBounds(100, 100, 600, 150)
titlePanel.setBackground(Color.GRAY);
titleLabel = new JLabel("TEXT RPG");
titleLabel.setForeground(Color.WHITE);
titleLabel.setFont(titleFont);
//Start Button Panel
startButtonPanel = new JPanel();
//startButtonPanel.setBounds(300, 400, 200, 100 );
startButtonPanel.setBackground(Color.BLUE);
//Start Button
startButton = new JButton("START");
startButton.setBackground(Color.BLACK);
startButton.setForeground(Color.WHITE);
startButton.setFont(buttonFont);
//Add Elements to Window
titlePanel.add(titleLabel);
startButtonPanel.add(startButton);
//Add Elements to Container
c.add(titlePanel, BorderLayout.CENTER); //JFrame content pane uses BorderLayout by default
c.add(startButtonPanel, BorderLayout.PAGE_END);
window.pack();
window.setVisible(true); //invoke after all added and pack() ed
}
}
不要指望在第一次尝试时就能获得完全想要的外观。学习如何使用不同的布局管理器和它们的组合来获得你想要的。
我正在尝试在 GUI 中制作 RPG 游戏,但进展并不顺利。 在我添加 JButton 之前,一切正常并显示在 window 中。我不确定添加 JButton 后发生了什么。 应该有显示在灰色区域的标题和蓝色区域的按钮。我已正常尝试 运行 和 运行 调试器,none 的文本或按钮出现。 我正在按照教程 here step-by-step 进行操作,我没有发现任何不合适的地方。 (我知道我已经更改了变量名)。
我做错了什么?我需要添加任何额外的东西吗?
import javax.swing.*;
import java.awt.*;
public class Game {
JFrame window;
Container c;
JPanel titlePanel;
JPanel startButtonPanel;
JLabel titleLabel;
JButton startButton;
Font titleFont = new Font("Cooper Black", Font.PLAIN, 90);
Font buttonFont = new Font("Cooper Black", Font.PLAIN, 32);
public static void main(String[] args) {
new Game();
}
public Game() {
//Main Window
window = new JFrame();
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setBackground(Color.BLACK);
window.setLayout(null);
window.setVisible(true);
c = window.getContentPane();
//Title Panel
titlePanel = new JPanel();
titlePanel.setBounds(100, 100, 600, 150);
titlePanel.setBackground(Color.GRAY);
titleLabel = new JLabel("TEXT RPG");
titleLabel.setForeground(Color.WHITE);
titleLabel.setFont(titleFont);
//Start Button Panel
startButtonPanel = new JPanel();
startButtonPanel.setBounds(300, 400, 200, 100 );
startButtonPanel.setBackground(Color.BLUE);
//Start Button
startButton = new JButton("START");
startButton.setBackground(Color.BLACK);
startButton.setForeground(Color.WHITE);
startButton.setFont(buttonFont);
//Add Elements to Window
titlePanel.add(titleLabel);
startButtonPanel.add(startButton);
//Add Elements to Container
c.add(titlePanel);
c.add(startButtonPanel);
}
}
我的一个朋友提出要解决这个问题。他添加了一个叫做 "extends Canvas".
的东西这是固定版本:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Game extends Canvas{
private static final long serialVersionUID = 1L;
public static JFrame window;
public static Container c;
JPanel titlePanel,startButtonPanel;
JLabel titleLabel;
JButton startButton;
Font titleFont = new Font("Cooper Black", Font.PLAIN,90);
private static int width = 800;
private static int height = 600;
public static String title ="Blueberry's Game";
/*----------------------------------------------------------------------------------------------------*/
public static void main(String[] args){
Game game = new Game();
Game.window.setResizable(false);
Game.window.setTitle(Game.title);
Game.window.add(game);
Game.window.pack();
Game.window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Game.window.setLocationRelativeTo(null);
Game.window.setVisible(true);
}
/*----------------------------------------------------------------------------------------------------*/
public Game(){
window = new JFrame();
setPreferredSize(new Dimension(width, height));
window.getContentPane().setBackground(Color.BLACK);
c = window.getContentPane();
//////////TITLE PANEL//////////////////////
titlePanel = new JPanel();
titlePanel.setBounds(100, 100, 600, 150);
titlePanel.setBackground(Color.BLACK);
titleLabel = new JLabel("TEXT RPG");
titleLabel.setForeground(Color.WHITE);
titleLabel.setFont(titleFont);
//////////START BUTTON PANEL//////////////////////
startButtonPanel = new JPanel();
startButtonPanel.setBounds(300, 400, 200, 100);
startButtonPanel.setForeground(Color.BLUE);
//////////START BUTTON//////////////////////
startButton = new JButton("START");
startButton.setBackground(Color.BLACK);
startButton.setForeground(Color.WHITE);
//////////ADD ELEMENTS TO WINDOW//////////////////////
titlePanel.add(titleLabel);
startButtonPanel.add(startButton);
//////////ADD ELEMENTS TO CONTAINER//////////////////////
c.add(titlePanel);
c.add(startButtonPanel);
}
/*----------------------------------------------------------------------------------------------------*/
}
编辑:我也设法明白为什么 window 在我的问题中没有显示任何内容。我只需要用光标调整 window 大小。
请勿按照教您使用空布局管理器和设置边界的教程进行操作 "manually"。这不是一个好习惯。
从代码中删除所有边界设置。
而是使用 Layout Managers,这就是他们所做的,为您动态设置界限:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Game {
JFrame window;
Container c;
JPanel titlePanel;
JPanel startButtonPanel;
JLabel titleLabel;
JButton startButton;
Font titleFont = new Font("Cooper Black", Font.PLAIN, 90);
Font buttonFont = new Font("Cooper Black", Font.PLAIN, 32);
public static void main(String[] args) {
new Game();
}
public Game() {
//Main Window
window = new JFrame();
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c = window.getContentPane();
c.setBackground(Color.BLACK);
//window.setLayout(null);
//Title Panel
titlePanel = new JPanel(); //JPanel uses FlowLayout by default
//titlePanel.setBounds(100, 100, 600, 150)
titlePanel.setBackground(Color.GRAY);
titleLabel = new JLabel("TEXT RPG");
titleLabel.setForeground(Color.WHITE);
titleLabel.setFont(titleFont);
//Start Button Panel
startButtonPanel = new JPanel();
//startButtonPanel.setBounds(300, 400, 200, 100 );
startButtonPanel.setBackground(Color.BLUE);
//Start Button
startButton = new JButton("START");
startButton.setBackground(Color.BLACK);
startButton.setForeground(Color.WHITE);
startButton.setFont(buttonFont);
//Add Elements to Window
titlePanel.add(titleLabel);
startButtonPanel.add(startButton);
//Add Elements to Container
c.add(titlePanel, BorderLayout.CENTER); //JFrame content pane uses BorderLayout by default
c.add(startButtonPanel, BorderLayout.PAGE_END);
window.pack();
window.setVisible(true); //invoke after all added and pack() ed
}
}
不要指望在第一次尝试时就能获得完全想要的外观。学习如何使用不同的布局管理器和它们的组合来获得你想要的。