JButton位置不起作用



我是java新手,但知道swing的基础知识和大多数库,我想知道为什么我最近制作的这个实践程序没有将JButton定位在正确的坐标上。我难住了。这是源代码。

package game;
import java.awt.Color;
import java.awt.Image;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JButton;

public class TitleScreen extends JFrame
{
JFrame window = new JFrame();
JPanel screen = new JPanel();
JButton start = new JButton("Play Game");
JButton end = new JButton("Quit Game");
ImageIcon thing = new ImageIcon("lol.png");
Image pic = thing.getImage();
public TitleScreen()
{
 window.setTitle("Test");
 window.setSize(500,500);
 window.setBackground(Color.BLUE);
 window.setLocationRelativeTo(null);
 window.setResizable(false);
 window.setVisible(true);
}
public void canvas()
{
screen.setLayout(null);
window.add(screen);
start.setBounds(250,250,100,50);   
screen.add(start);  
}
public static void main(String[] args) 
{
TitleScreen TitleScreen = new TitleScreen();    
}

这是因为您没有调用canvas方法,这就是为什么它没有显示。

解决方案:

 public TitleScreen()
{
 window.setTitle("Test");
 window.setSize(500,500);
 window.setLocationRelativeTo(null);
 screen.setBackground(Color.BLUE);
 window.setVisible(true);
 canvas();
}

几点:

  • 不要使用null布局,而是使用适合您需要的适当布局

    关于如何使用各种布局管理器

  • 值得一读
  • 使用SwingUtilities.invokeLater()确保EDT正确初始化。

    阅读更多

    • 为什么要使用swingutility。invokeLater in main method?

    • SwingUtilities.invokeLater

  • 始终在添加完所有分量后最后调用JFrame#setVisible(true)

  • 阅读更多JFrame setBackground的用途


应该是这样的:

public void canvas() {
    screen.setBackground(Color.BLUE);
    screen.add(start);
    window.add(screen);             
}
public TitleScreen() {
    ...
    canvas();
    window.setVisible(true); 
}
public static void main(String[] args) {        
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            TitleScreen TitleScreen = new TitleScreen();
        }
    });
}

相关内容

  • 没有找到相关文章

最新更新