2015-12-17 4 views
0

Как я могу получить доступ к JFrame из другого класса? Я пытаюсь добавить JLabel (jlabel_title) в свой JFrame (кадр).Доступ к JFrame из другого класса

public class Frame_Main 
{ 
    public static void createWindow() 
    { 
     JFrame frame = new JFrame(); 
     frame.setPreferredSize(new Dimension(400,250)); 
     frame.setResizable(false); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Frame_Menu frame_menu = new Frame_Menu(); 
     frame.setMenuBar(frame_menu.getMenubar()); 
     frame.setLayout(new BorderLayout()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
     createTitle(); 
    } 

    public static void createTitle() 
    { 
     //IF abfrage integrierieren ob jlabel leer ist 
     JLabel jlabel_title = new JLabel("test"); 
     jlabel_title.setBackground(Color.BLUE); 
     jlabel_title.setFont(new Font("Segoe UI", Font.BOLD, 20)); 
     jlabel_title.setVisible(true); 

Ошибка проявляется здесь:

 Frame_Main.createWindow(frame).add(jlabel_title, BorderLayout.NORTH); 
    } 
} 
+1

Как 'Frame_Main.createWindow (frame)' является допустимым выражением? Он не будет компилироваться, поскольку нет такого метода с параметром – SacJn

ответ

3

Во-первых, не следует использовать статические методы, если на самом деле не требуется (нет никаких причин, чтобы сделать это здесь).

Затем добавьте JFrame в качестве члена в классе - это то доступны из методов класса по:

public class Frame_Main { 
    private JFrame frame = new JFrame(); 

    public void createWindow() { 
    // ... 
    } 


    public void createTitle() { 
    // ... 
     frame.add(jlabel_title, BorderLayout.NORTH); 
    } 
} 

В коде вызова, то вам необходимо создать экземпляр вашего Frame_Main класса и вызова createWindow() метод:

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      Frame_Main mainWindow = new Frame_Main(); 
      mainWindow.createWindow(); 
     } 
    }); 
} 

(вы можете изменить createWindow() в нечто вроде initializeWindow(), так как это то, что на самом деле делает метод)

+0

Спасибо за быстрый ответ, но не нужно ли создавать createWindow() и createTitle() статический метод, когда вы вызываете их впоследствии в своей публичной static void main с помощью команда 'Frame_Main.createWindow();'? Редактировать: Не заметил, что вы добавили код вызова, теперь попробуем его сейчас. –

+1

Нет, поскольку вы создаете новый экземпляр класса. 'main' является только статическим по соглашению, так как JVM должна иметь некоторую точку входа –

+1

да, спасибо, что она сработала (: –

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