Ошибка при вызове кода, создающего JButton (не отображается) - PullRequest
0 голосов
/ 01 декабря 2018

Я создал игру палача и хотел бы добавить JFrame вокруг нее.Я начал с создания главного экрана, но у меня возникла проблема с началом JButton.По какой-то причине он вообще не появляется, и я попробовал несколько решений.

import java.util.*;
import javax.swing.*;

public class mainScreen extends JFrame {
      JPanel mainPanel = new JPanel();
      JButton startButton = new JButton("Start");


  public mainScreen() {
   JFrame mainFrame = new JFrame("Main Screen");
  mainFrame.add(new JLabel(new ImageIcon("C:/Users/Owner/Desktop/Java Projects/hangman_image.jpg")));
   mainFrame.setSize(1920, 1080);
   mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE );
   mainPanel = new JPanel();
   startButton = new JButton("Start");
   mainPanel.add(startButton);

   mainFrame.setVisible(true);
   }
} 

Рамка появляется, но не сама кнопка (я пытался избавиться от изображения, чтобы увидеть, покрывает ли оно его).

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Вы создали панель, но не добавляете ее в мэйнфрейм, даже если ваша кнопка была добавлена ​​на панель.

import javax.swing.*;

class Test1 extends JFrame {
JPanel mainPanel = new JPanel();
JButton startButton = new JButton("Start");


public Test1() {
    JFrame mainFrame = new JFrame("Main Screen");
    mainFrame.add(new JLabel(new ImageIcon("/filelocation")));
    mainFrame.setSize(1920, 1080);
    mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE );
    mainPanel = new JPanel();
    startButton = new JButton("Start");
    mainPanel.add(startButton);
    //here you add your panel to mainFrame
    mainFrame.add(mainPanel);
    mainFrame.setVisible(true);
}

}


public class Test{
public static void main(String args[]) {
    new Test1();
}
} 

Надеюсь, это поможет.

0 голосов
/ 01 декабря 2018

Основная проблема в том, что mainPanel не был добавлен в видимый контейнер.Смотрите дополнительные советы в комментариях к коду.

import java.awt.*;
import javax.swing.*;

// no need to extend JFrame ..
//public class mainScreen extends JFrame {
public class mainScreen {

    // this is never addded to a visible container so .. (1)
    JPanel mainPanel = new JPanel();
    JButton startButton = new JButton("Start");

    public mainScreen() {
        JFrame mainFrame = new JFrame("Main Screen");
        mainFrame.add(new JLabel("C:/../hangman_image.jpg"));
        // (1) .. add it!
        mainFrame.add(mainPanel, BorderLayout.PAGE_START);
        // don't guess.. 
        //mainFrame.setSize(1920, 1080);
        // .. instead
        mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        // it is already instantiated, no need to do it twice! 
        //mainPanel = new JPanel();
        startButton = new JButton("Start");
        mainPanel.add(startButton);

        mainFrame.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable r = () -> {
            mainScreen ms = new mainScreen();
        };
        SwingUtilities.invokeLater(r);
    }
}
...