2016-12-13 5 views
0

2 차원 JTabbedPane을 생성하려고합니다. coderanch이라는 작은 예제에서 JTabbedPane을 2 차원으로 생성했습니다. 지금 내가하고 싶은 것은 테이블 생성 후 외부 클래스의 각 탭에 그림을 추가하는 것입니다. 의미, 나는이 표를 만든 다음 원하는 표를 표 안에 배치합니다 (아마도 사용자는 필요한 순서를 미리 알지 못하고 사용하는 숫자의 수만 알 수 있습니다). 하지만 탭을 업데이트 할 수없는 것 같습니다. 누군가 내가 잘못하고있는 것을 보여줄 수 있기를 바랬습니다. 다음은 그림 대신 텍스트를 추가하는 MWE입니다.2D 탭 JTabbedPane에 추가하기

import java.awt.Dimension; 
import java.awt.Toolkit; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTabbedPane; 

public class DCTabbed2DPane { 
    private Dimension screensize; 
    private JFrame frame; 
    private JTabbedPane topTabbedPane; 
    private JTabbedPane[] leftTabbedPane; 
    private int rows; 
    private int cols; 

    private String frameName; 

public DCTabbed2DPane(String frameName, int rows, int cols) { 
    this.frameName = frameName; 
    this.rows = rows; 
    this.cols = cols; 
    init(); 
} 

private void setScreenSize() { 
    screensize = Toolkit.getDefaultToolkit().getScreenSize(); 
} 

private void setJFrame() { 
    frame = new JFrame(frameName); 
    frame.setSize((int) (screensize.getHeight() * .75 * 1.618), (int) (screensize.getHeight() * .75)); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

} 

private void setJTabbedPane() { 
    topTabbedPane = new JTabbedPane(JTabbedPane.TOP); 
    leftTabbedPane = new JTabbedPane[cols]; 

} 

private void setTabs() { 
    for (int i = 0; i < cols; i++) { 
     leftTabbedPane[i] = new JTabbedPane(JTabbedPane.LEFT); 
     for (int j = 0; j < rows; j++) { 
      leftTabbedPane[i].addTab("Super Layer " + (j + 1), new JLabel("Sector " + (i + 1) + " - " + (j + 1))); 
     } 
     topTabbedPane.addTab("Sector " + (i + 1), leftTabbedPane[i]); 
    } 
    frame.add(topTabbedPane); 
    topTabbedPane.setSelectedIndex(-1); 
} 

private void init() { 
    setScreenSize(); 
    setJFrame(); 
    setJTabbedPane(); 
    setTabs(); 
} 

public void addCanvasToPane(Integer row, String str) { 
    leftTabbedPane[row].addTab("", new JLabel(str)); 
    frame.add(topTabbedPane); 
    frame.revalidate(); 
    frame.repaint(); 
} 

public void showFrame() { 

    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    int rows = 6; 
    int cols = 6; 

    DCTabbed2DPane test = new DCTabbed2DPane("PooperDooper", rows, cols); 
    for (int j = 0; j < cols; j++) { 
     test.addCanvasToPane(j, "Name " + j); 
    } 
    test.showFrame(); 

} 

은}

답변

1

그것도 당신은

leftTabbedPane[i] = new JTabbedPane(JTabbedPane.LEFT); 
      for (int j = 0; j < rows; j++) { 
       leftTabbedPane[i].addTab("Super Layer " + (j + 1),new ImageIcon(getClass().getResource("Images/map.png")), new JLabel("Sector " + (i + 1) + " - " + (j + 1))); 
      } 

enter image description here

처럼 탭의 탐색에 그림을 원하거나 이런 일

leftTabbedPane[i] = new JTabbedPane(JTabbedPane.LEFT); 
      for (int j = 0; j < rows; j++) { 
       leftTabbedPane[i].addTab("Super Layer " + (j + 1), new MyLabel("Images/Horse.png","").getLabel());   
      } 

어디 있어요 그 이미지를 설정하는 좋은 예이지만 MyLabel

public class MyLabel { 
    JLabel label; 
    String path; 
    String text; 

    public MyLabel(String path, String text) { 
     this.label = new JLabel(); 
     this.path = path; 
     this.text = text;  
    } 
    public void setUpImage(String path) { 
     this.label.setIcon(new ImageIcon(getClass().getResource(path))); 
    } 

    public JLabel getLabel() { 
     setUpImage(this.path); 
     return this.label; 
    } 

} 

enter image description here

+0

, 그것은 내가 도움을 요청 있었는지 아니었다. 내가 물었던 질문이 모호하지만 그것은 내 잘못이라는 것을 알았다. 나는 질문을 업데이트 할 것이지만, 나는 당신이 당신의 대답을 위해 시간을 가져 주셔서 감사합니다. – mkunkel

+0

구성 요소 (패널, 버튼, 콤보 박스 등)와 같은 의미가 아닌, 아무런 문제가 없습니다. –