2016-08-19 10 views
0

Java가 새로 생겨서 GridBagLayout으로 첫 번째 GUI를 생성하려고합니다. 아래의 코드에서 전체 화면을 가져 오지만 "label_url_eingabe"및 "url_eingabe"구성 요소는 표시되지 않습니다 (빈 창). 창을 최소화하면 표시됩니다! 창 크기를 특정 값으로 설정하면 동일한 동작이 발생합니다. 따라서 구성 요소는 프로그램 시작 초기에 표시되지 않습니다.Java GridBagLayout 구성 요소가 전체 화면에 표시되지 않습니다.

package ofb_reader_package; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

public class OFB_Reader_GUI extends JFrame { 

// Definition der GUI Komponenten 

    // Eingabefeld URL 

    JLabel label_url_eingabe; 
    JTextField url_eingabe; 

    //this.OFB_Reader_GUI(); 

// Eigenschaften Hauptfenster "OFB_Reader_GUI" 
    public OFB_Reader_GUI() { 

     // Eigenschaften Hauptfenster 
     setVisible(true); 
     setSize(500, 300); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setTitle("Mark's OFB Reader"); 
     setResizable(true); 
     setExtendedState(JFrame.MAXIMIZED_BOTH); 
     setLayout(null); 




     this.label_url_eingabe = new JLabel("URL:"); 
     this.url_eingabe = new JTextField(10); 

     this.getContentPane().setLayout(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 


     // POSITIONIERUNGEN MIT GRIDBAGLAYOUT 

     // URL Eingabe Label und Einghabefeld 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 0; 
     c.gridy = 0; 
     c.ipadx = 35; 
     c.weightx = 1.0; 
     c.weighty = 1.0; 
     c.anchor = GridBagConstraints.NORTHWEST; 
     this.getContentPane().add(this.label_url_eingabe, c); 


     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 1; 
     c.gridy = 0; 
     c.ipadx = 35; 
     c.weightx = 1.0; 
     c.weighty = 1.0; 
     c.anchor = GridBagConstraints.NORTHWEST; 
     add(this.url_eingabe, c); 

    } 
} 

이 메인입니다 :

package ofb_reader_package; 

import javax.swing.*; 



public class OFB_Reader_main_class { 

    public static void main(String[] args){ 

     new OFB_Reader_GUI(); 
     new OFB_Reader_main_class(); 

    } 
} 
+1

JFrame의는, setVisible은 ** 마지막 ** 메소드 호출이 아닌 처음이다. JFrame 메서드를 호출하는 순서는 ** 가장 중요합니다 **. JFrame을 압축하여 표시하기 전에 Swing 구성 요소를 만들어 JPanel 또는 JFrame에 추가해야합니다. 마지막으로 null 레이아웃을 사용하지 마십시오. GUI를 만들려면 [스윙 레이아웃] (https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)을 사용하십시오. –

답변

0

도와 주셔서 감사합니다 많이! 내가 지금 그것을 가지고 I 일 :

package ofb_reader_package; 

import javax.swing.*; 

import java.awt.*; 



public class OFB_Reader_GUI_and_Main { 





    public static void addComponentsToPane(Container pane) { 

     JLabel label_url_eingabe; 
     JTextField url_eingabe; 

     pane.setLayout(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints();   

     label_url_eingabe = new JLabel("URL:"); 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 0; 
     c.gridy = 0; 
     pane.add(label_url_eingabe, c); 

     url_eingabe = url_eingabe = new JTextField(10); 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 1; 
     c.gridy = 0; 
     pane.add(url_eingabe, c); 

    } 

    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("GridBagLayoutDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Set up the content pane. 
     addComponentsToPane(frame.getContentPane()); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
     } 






public static void main(String[] args){ 

    //Schedule a job for the event-dispatching thread: 
    //creating and showing this application's GUI. 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 
}