2016-04-11 7 views
1

На данный момент я пытаюсь написать простую программу, но фактический JButton по какой-то причине не появляется, вот мой код ниже.JButtons не отображается

import javax.swing.*; 
import java.awt.*; 
public class Test extends JFrame { 
    public static void main(String[] args) { 
     JFrame window = new JFrame("Shoes"); 
     window.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     window.setResizable(true); 
     window.setSize(400,500); 
     window.setVisible(true); 
     window.setLocationRelativeTo(null); 
     JButton welcome = new JButton("Click here"); 
     welcome.setLocation(100,100); 
     welcome.setVisible(true); 
      // doesn't work, but is there another way to make it so? 
    //add(welcome); 
    } 
} 
+0

вы не добавляете кнопку в окно –

ответ

2

Вы создали кнопку, но не добавили ее.

Вы должны добавить его в window. Просто используя add(welcome), вы добавите его в свой кадр, который вы продлеваете, но не до window, в котором вы хотите его показать.

Вместо:

add(welcome); 

Вобще:

window.add(welcome); 
+0

Я бы также упомянул, что если вы создаете jframe, вам не нужно его расширять. (Что сделало бы этот код менее запутанным), и сделать ошибки, как его прокомментированный код не компилировать – dustinroepsch

2

Я также хотел бы отметить, что причина, код на вашем закомментированного разделе не работал, потому, что вы расширяете JFrame ,

Когда вы расширяете JFrame, вы наследуете все методы JFrame. Это включает add(). Однако, когда вы используете this.add(), вы добавляете компонентный компонент к вам Test Object (который также является JFrame), а не ваш window JFrame.

Чтобы добавить в окно, которое вы будете использовать window.add(welcome);

Чтобы остановить эти странные замешательства в будущем я хотел бы также изменить public class Test extends JFrame в public class Test

0

вы продлен JFrame еще в вашем коде вы используете другой JFrame что вы создали JFrame window = new JFrame("Shoes");, поэтому add(welcome); не работает для вас ... с его попытки добавить JButton в this экземпляр вашего Testclass (который не виден), а не window, который вы создали.

У вас есть 2 пути решения этого:

Первый, как упомянуто @Hackerdarshi является добавление кнопки в window вы создали. как: window.add(welcome);

Второй способ заключается в использовании вашего расширения JFrameclass (otherwhise почему распространяется на всех) и вызывать все методы на window используя this экземпляр вашего Testclass:

public Test() { 
    super("Shoes"); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setResizable(true); 
    setSize(400,500); 
    setVisible(true); 
    setLocationRelativeTo(null); 
    JButton welcome = new JButton("Click here"); 
    welcome.setLocation(100,100); 
    welcome.setVisible(true); 
     // this will work since `this` instance is set to visible 
    add(welcome); 
} 

ВНИМАНИЕ, что для установки кнопки местоположение как: welcome.setLocation(100,100); вы должны использовать nullLayout

Смежные вопросы