2012-03-29 3 views
2

이것은 처음에는 Swing 프레임 워크를 둘러보기 위해 고민 중이었습니다.자바 스윙 믹싱 팬

dog.jpg, 적어도 500 px square의 이미지를 제공하면 다음 코드는 이미지를 스크롤 패널에 표시해야합니다. 이 표시되면, 나는 절망에 손을 던지지 않을 것입니다. 내가 뭘 놓치고 있니?

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

public class ScrollSample { 
    public static void main(String args[]) { 
    String title = (args.length == 0 ? "JScrollPane Sample" : args[0]); 
    new ScrollSample(title) ; 
    } 

    public ScrollSample (String title) { 
    JFrame frame = new JFrame(title); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Icon icon = new ImageIcon("dog.jpg"); 
    JLabel dogLabel = new JLabel(icon); 
    dogLabel.setSize(500, 500) ; 

    JLayeredPane layeredPane = new JLayeredPane() ; 
    layeredPane.add(dogLabel, new Integer(0)) ; 

    JPanel jp = new JPanel() ; 
    jp.add(layeredPane) ; 
    jp.setSize(500, 500) ; 

    JScrollPane scrollPane = new JScrollPane(); 
    scrollPane.setViewportView(jp); 

    frame.getContentPane().add(scrollPane, BorderLayout.CENTER); 
    frame.setSize(300, 200); 
    frame.setVisible(true); 
    } 
} 

고마워요!

+0

는 언제나 내가 사용하는 것이 좋습니다 [WindowBuilder 프로] (https://developers.google.com/java-dev-tools/wbpro/quick_start) – Kai

+0

코드에 분명히 뭔가 잘못을 찾을 수 없습니다. dog.jpg를 프로젝트 루트 카탈로그에 넣었습니까? –

답변

4

더 큰 너비와 크기의 구성 요소를 그리려면 JLayeredPane의 기본 크기를 설정해야합니다. 특히 기본 레이아웃이있는 JPanel에 추가하기 때문에 특히 그렇습니다. JLayeredPane에는 기본적으로 레이아웃 관리자가 없으므로 경계를 관리하거나 기본 레이아웃 관리자를 계층화 된 창에 추가 할 수 있습니다. 간단한 방법은 다음과 같습니다

JLayeredPane layeredPane = new JLayeredPane() ; 

때 응용 프로그램 실행을

layeredPane.setPreferredSize(new Dimension(500,500)); 

를 추가 한 다음 창을 최대화 (또는 600 × 600에 JFrame의 크기를 설정).

는 읽기 최대 : How to Use Layered Panes

+0

레이아웃 관리자가 중간 JPanel jp가 필요한 이유를 발급합니까? 나도 그걸 알아 냈어. –

4
  • JPanel과의 기본 레이아웃은 FlowLayout가있다. FlowLayout은 각 구성 요소의 기본 크기가 이고 테두리가 5 픽셀입니다. 대신 BorderLayout을 사용하거나 레이어 패널을 스크롤 창에 직접 추가하십시오.
  • JLayeredPane의 기본 크기는 (0, 0)입니다. 크기는 으로 설정하십시오.
4

EDT에서 스윙 GUI를 시작해야합니다. 사용자를위한 운동으로 남겨 두었습니다.

import java.awt.*; 
import javax.swing.*; 
import java.net.URL; 

public class ScrollSample { 

    public static void main(String args[]) throws Exception { 
     final URL url = new URL("http://pscode.org/media/stromlo2.jpg"); 
     String title = (args.length == 0 ? "JScrollPane Sample" : args[0]); 
     new ScrollSample(title, url) ; 
    } 

    public ScrollSample (String title, URL url) { 
     JFrame frame = new JFrame(title); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Icon icon = new ImageIcon(url); 
     JLabel dogLabel = new JLabel(icon); 
     dogLabel.setBounds(0,0,640,480); 

     JLayeredPane layeredPane = new JLayeredPane() ; 
     layeredPane.add(dogLabel, new Integer(0)) ; 
     layeredPane.setPreferredSize(new Dimension(500, 500)) ; 

     JPanel jp = new JPanel(new BorderLayout()) ; 
     jp.add(layeredPane) ; 

     JScrollPane scrollPane = new JScrollPane(jp); 

     frame.getContentPane().add(scrollPane, BorderLayout.CENTER); 
     frame.setSize(300, 200); 
     frame.setVisible(true); 
    } 
} 
+0

public static void main (String [] args) { // 이벤트 발송 스레드에 대한 작업 예약 : //이 응용 프로그램의 GUI를 만들고 표시합니다. public void run() { 문자열 제목 = (args.length == 0? "JScrollPane Sample": args [0]) 새로운 ScrollSample (제목, url); } }); } –