2015-01-10 102 views
1

所以我試圖啓動一個圖形程序,我有一個JFrame,它擁有多個JPanel。 JPanel需要結合來創建1個圖像,但是當我運行我的程序時,我會看到圖像周圍的邊框。我無法區分邊框是由保存圖像的JLabel引起的,還是由於JPanel或佈局管理器引起的。如何刪除JLabel上的邊框?

如何刪除邊框?我需要更改佈局管理器嗎?如果是這樣如何?

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

public class StarryNight { 
    JFrame backGround; 
    JPanel rootPanel; 
    JLabel rootImage; 

    public StarryNight(){ 
     backGround = new JFrame("Starry Starry Night"); 
     backGround.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     backGround.setResizable(false); 
     backGround.setSize(1000,667); 
     backGround.getContentPane().setBackground(Color.BLACK); 
     backGround.setLayout(new BoxLayout(backGround.getContentPane(),BoxLayout.Y_AXIS)); 

     rootPanel = new JPanel(); 
     rootPanel.setSize(1000, 667); 
     rootPanel.setBackground(Color.BLUE);; 
     rootImage = new JLabel(); 
     rootImage.setIcon(new ImageIcon(getClass().getResource("Starry Night.jpg"))); 
     rootPanel.add(rootImage); 


     JPanel jap = new JPanel(); 
     jap.setSize(1000,100); 
     jap.setBackground(Color.GREEN); 

     backGround.add(rootPanel); 
     backGround.add(jap); 
     backGround.pack(); 
     backGround.setVisible(true); 


    } 

    private static void runGUI() { 
     JFrame.setDefaultLookAndFeelDecorated(true); 
     StarryNight ssn= new StarryNight(); 
    } 

    public static void main(String args[]){ 
     javax.swing.SwingUtilities.invokeLater(new Runnable(){ 
      public void run(){ 
       runGUI(); 
      } 
     }); 
    } 
} 

enter image description here

+0

AFAIK,默認情況下JLabel沒有邊框。問題在別處。 –

+0

請勿設置尺寸。讓圖像,組件和佈局爲您設置尺寸。這可能是你的問題 - 很難說,因爲我們沒有與我們的圖像。 –

回答

3

rootPanel =新JPanel();

默認情況下,JPanel使用FlowLayout,默認允許組件之前/之後有5個像素。因此,當您將圖像添加到面板時,您會在所有面上看到5個像素的空間。

如果您不想要那個空間,那麼請查看FlowLayout API並在組件之間創建一個沒有空格的FlowLayout,然後將該佈局添加到rootPanel。例如:

rootPanel = new JPanel(new FlowLayout(...)); 
+0

謝謝!這解決了問題。我能夠通過刪除邊界 rootPanel = new JPanel(new FlowLayout(FlowLayout.CENTER,0,0)); –

0

如果您有這樣的需求,您可能需要考慮探索JavaFX。它使得CSS格式化變得容易,而Swing使它變得有些困難。