2017-05-24 5 views
0

J'ai un problème avec l'ajout d'un JLabel à un JFrame. J'utilise un JPanel comme décrit dans plusieurs tutoriels, mais l'étiquette n'apparaît pas dans le cadre; le même problème avec d'autres composants d'oscillation comme JTextField, JButton etc. Les lignes de dessin, les rectangles et ainsi de suite fonctionnent. J'espère que quelqu'un sait, quel genre d'erreur que je fais ici:Ajout d'un JLabel à un JFrame

package plot1; 

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.border.EmptyBorder; 

public class Gui extends JFrame { 

    private JPanel contentPane; 

    public Gui(){ 

     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(new BorderLayout(0, 0)); 
     setContentPane(contentPane);  

     setSize(1200, 600); 
     setLayout(null); 
     setLocationRelativeTo(null); 
     setTitle("Plot"); 
     addWindowListener(new WindowAdapter(){ 
      public void windowClosed(WindowEvent evnt){ 
       System.exit(0); 
      } 
     }); 
     setResizable(false);  

     JLabel lblStanFunc = new JLabel("Die Funktionssyntax lautet:"); 
     lblStanFunc.setBounds(800, 40, 300, 30); 
     lblStanFunc.setVisible(true); 
     add(lblStanFunc); 

    } 

} 

La principale méthode est dans une autre classe:

package plot1; 

    public class Main { 
     public static void main(String[] args){ 

      new Gui().setVisible(true);; 

     } 
    } 

Le cadre apparaît comme prévu, mais le JLabel manque. Merci pour tous les commentaires utiles.

+0

Je ne peux pas reproduire cela. Je peux très bien voir l'étiquette. C'est en haut à droite du cadre. Votre écran n'est pas assez grand pour montrer l'ensemble JFrame? – Sweeper

+1

1) Pour une meilleure assistance plus rapide, postez un [MCVE] ou [Short, Self Contained, Example correct] (http://www.sscce.org/). 2) Les interfaces graphiques Java doivent fonctionner sur différents systèmes d'exploitation, taille d'écran, résolution d'écran, etc., en utilisant différents PLAF dans différents environnements locaux. En tant que tels, ils ne sont pas propices à la mise en page pixel parfait. Utilisez plutôt des gestionnaires de disposition, ou [des combinaisons de ceux-ci] (http://stackoverflow.com/a/5630271/418556) avec un remplissage de mise en page et des bordures pour [espace blanc] (http://stackoverflow.com/a/17874718/ 418556). –

+0

Vous aurez peut-être besoin d'un appel 'pack' et vous aurez besoin d'exécuter l'interface graphique sur le thread Dispatch d'événement, selon le tutoriel Java sur Swing. –

Répondre

3

Just Add setVisible(true)

import java.awt.BorderLayout; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 

public class GUI extends JFrame { 
    private JPanel contentPane; 

     public GUI(){ 

      contentPane = new JPanel(); 
      contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
      contentPane.setLayout(new BorderLayout(0, 0)); 
      setContentPane(contentPane);  

      setSize(1200, 600); 
      setLayout(null); 
      setLocationRelativeTo(null); 
      setTitle("Plot"); 
      addWindowListener(new WindowAdapter(){ 
       public void windowClosed(WindowEvent evnt){ 
        System.exit(0); 
       } 
      }); 
      setResizable(false); 
      setVisible(true); 

      JLabel lblStanFunc = new JLabel("Die Funktionssyntax lautet:"); 
      lblStanFunc.setBounds(800, 40, 300, 30); 
      lblStanFunc.setVisible(true); 
      add(lblStanFunc); 

     } 

     public static void main(String[] args) { 
      new GUI(); 
     } 
} 
0

Je ne peux pas reproduire non plus. Comme balayeur mentionné, si votre écran n'est pas assez grand, changez la taille de l'image à setSize(800, 600) et marquez l'emplacement à lblStanFunc.setBounds(300, 250, 300, 30). L'étiquette devrait être au centre de l'écran.