2017-05-24 225 views
0

我在將JLabel添加到JFrame時遇到問題。我使用了幾個教程中描述的JPanel,但Label不會在Frame中彈出;與其他擺動組件如JTextField,JButton等相同的問題。繪製線條,矩形等工作。我希望有人知道,我在這裏做什麼樣的錯誤:將JLabel添加到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); 

    } 

} 

主方法是在另一個類:

package plot1; 

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

      new Gui().setVisible(true);; 

     } 
    } 

框彈出如預期,但JLabel的缺失。感謝所有有用的評論。

+0

我無法複製此內容。我可以很好地看到標籤。它在框架的右上方。您的屏幕不夠大,無法顯示整個JFrame? – Sweeper

+1

1)爲了更快地獲得更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 2)Java GUI必須在不同的語言環境中使用不同的PLAF來處理不同的操作系統,屏幕大小,屏幕分辨率等。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。 –

+0

您可能需要'pack'調用,並且您需要根據Swing上的Java教程在Event Dispatch Thread上運行GUI。 –

回答

3

只需添加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

我無法重現它的。正如清掃人員提到的,如果您的屏幕不夠大,請將框架大小更改爲setSize(800, 600),並將位置標記爲lblStanFunc.setBounds(300, 250, 300, 30)。標籤應該位於屏幕的中心。