2015-03-01 2 views
0

--Situation--Невозможно отобразить JLabel на JFrame

Я хотел сделать JLabel на JFrame. Я использовал 3 класса:

1) Window.java - Window (JFrame);

2) Main.java - Программа запускаемым скрипт

3) GUI.java - TextFields, этикетки, кнопки

--Question--

Все я это JFrame. На нем нет ярлыков.

--source Code--

Window.java:

package GUI; 

import java.awt.FlowLayout; 

import javax.swing.JFrame; 

public class Window extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public Window(int width, int height, String title, boolean resizable, int operation) { 

     JFrame gui = new JFrame(); 
     gui.setLayout(new FlowLayout()); 
     gui.setDefaultCloseOperation(operation); 
     gui.setSize(width, height); 
     gui.setVisible(true); 
     gui.setTitle(title); 
     gui.setResizable(resizable); 
     gui.setLocationRelativeTo(null); 

    } 

} 

Main.java:

package Main; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 

import Func.Func; 
import GUI.GUI; 
import GUI.Window; 

public class Main{ 

    /** 
    * 
    */ 
    static Func func = new Func(); 
    static GUI gui = new GUI(); 
    static Window window1 = new Window(1200, 800, "JFrame Example", false, JFrame.EXIT_ON_CLOSE); 

    public static void main(String[] args) { 

     JLabel label = gui.createLabel("Hi dude!!!!!", 0, 0); 
     window1.add(label); 

    } 

} 

GUI.java:

package GUI; 

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

public class GUI extends JFrame { 

    /** 
    * Author Sculptor86 
    */ 


    public GUI() { 

    } 

    private static final long serialVersionUID = 1L; 

    public JLabel createLabel(String text, int AY, int AX) { 

     JLabel label = new JLabel(text, JLabel.CENTER); 
     label.setAlignmentX(AX); 
     label.setAlignmentY(AY); 
     label.setVisible(true); 
     return label; 

    } 

    public JTextField createTextBox(String text, Color fg, Color bg, int Max) { 

     JTextField textField; 
     textField = new JTextField(text, Max); 
     textField.setForeground(fg); 
     textField.setBackground(bg); 
     textField.setVisible(true); 
     return textField; 

    } 

    public JButton createButton(String text, Color fg, Color bg) { 

     JButton button; 
     button = new JButton(text); 
     button.setForeground(fg); 
     button.setBackground(bg); 
     button.setVisible(true); 
     return button; 

    } 

} 

Надежда кто-то может помочь, Влад

+0

Не полагайтесь на статические – MadProgrammer

ответ

0

Вы добавляете ярлык на ваш объект Window не в JFrame вы создаете в конструкторе окна.

Вот исправленный Основной класс:

// Main class, which just creates a window and adds a label and shows it 
public class Main{ 
    public static void main(String[] args) { 
     Window window = new Window(1200, 800, "JFrame Example", false, JFrame.EXIT_ON_CLOSE); 
     JLabel label = window.createLabel("Hi dude!!!!!", 0, 0); 
     window.add(label); 
     window.setVisible(true); 
    } 
} 

Вот исправленный класс Window (я полностью удалить класс GUI и отнести поведение фабричных методов в этот класс для краткости):

// The basic window class (pretty much a constructor facade around JFrame) 
public class Window extends JFrame { 
    // constructor for creating windows 
    public Window(int width, int height, String title, boolean resizable, int operation) { 
     setLayout(new FlowLayout()); 
     setDefaultCloseOperation(operation); 
     setSize(width, height); 
     setTitle(title); 
     setResizable(resizable); 
     setLocationRelativeTo(null); 
    } 

    // factory method creating labels 
    public static JLabel createLabel(String text, int AY, int AX) { 
     JLabel label = new JLabel(text, JLabel.CENTER); 
     label.setAlignmentX(AX); 
     label.setAlignmentY(AY); 
     label.setVisible(true); 
     return label; 
    } 

    // factory method creating text fields 
    public static JTextField createTextBox(String text, Color fg, Color bg, int max) { 
     JTextField textField = new JTextField(text, max); 
     textField.setForeground(fg); 
     textField.setBackground(bg); 
     textField.setVisible(true); 
     return textField; 
    } 

    // factory method creating buttons 
    public static JButton createButton(String text, Color fg, Color bg) { 
     JButton button = new JButton(text); 
     button.setForeground(fg); 
     button.setBackground(bg); 
     button.setVisible(true); 
     return button; 
    } 
} 
+0

@Reimeus, вы правы, что не хорошо. Но настоящая проблема заключается в том, что он добавляет параметры из конструктора в новый JFrame в окне. – pL4Gu33

+0

@Reimus Конструктор Window() создает другой JFrame ... – RudolphEst

+0

Теперь вы определили проблему, можете ли вы предложить исправление для op для решения проблемы? – MadProgrammer

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