2015-01-10 2 views
1

그래서 여러 JPanels를 보유하고있는 JFrame이있는 그래픽 프로그램을 시작하려고합니다. JPanels는 하나의 이미지를 만들기 위해 결합해야하지만, 프로그램을 실행하면 이미지 주위에 테두리가 보입니다. 테두리가 이미지를 보유하고있는 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 = 새 JPanel (새 FlowLayout (FlowLayout.CENTER, 0,0)); –

0

이와 같은 경우 JavaFX를 탐색 해보십시오. CSS를 사용하면 서식을 쉽게 만들 수 있지만 Swing은 다소 어렵게 만듭니다.

관련 문제