참조

JTabbedPane Class 를 확장하여 Tooltip을 해당 tab의 이미지로 보여주는 일을 수행한다. 복잡한 코드가 필요하지도 않고 유용한 정보인듯 싶어 참고로 올린다.

<실행화면>

위 사이트에 올려놓은 소스를 Netbeans 의 Palette 에 추가해서 테스를 진행했다.

 Palette 에 추가해서 정상적으로 그림은 그려졌지만 이상하게 Tooltip이 이미지로 보이지 않음.

 마법사를 이용하여 JFrame Form 으로 클래스를 생성시 "Generated Code" 부분에서 문제가 있을거 같아 찬찬히 찾아보니.. "JThumbnailTabbedPane.java" 에서 add() 만 구현했기 때문에 발생된 문제였음.

실제로 NetBeans 에서 생성된 코드에서는 addTab() 를 사용함.




Generated Code

// <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        mainPanel = new javax.swing.JPanel();
        jThumbnailTabbedPane1 = new swing_sample.tooltiptab.JThumbnailTabbedPane();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTree1 = new javax.swing.JTree();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jScrollPane1.setViewportView(jTree1);

        jThumbnailTabbedPane1.addTab("tab1", jScrollPane1);

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane2.setViewportView(jTable1);

        jThumbnailTabbedPane1.addTab("tab2", jScrollPane2);

        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
        mainPanel.setLayout(mainPanelLayout);
        mainPanelLayout.setHorizontalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jThumbnailTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 623, Short.MAX_VALUE)
                .addContainerGap())
        );
        mainPanelLayout.setVerticalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jThumbnailTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 487, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>


NetBeans 의 "Generated Code" 부분을 수정하면 좋겠지만.. 수정하는 방법을 못찾음..

다운로드 받은 JThumbnailTabbedPane.java 에 "addTab()" 추가해서 문제를 해결함.

책 제목은 생각나지 않지만.. "사악한 마법사" 를 조심하라는 말이 불현듯 떠올랐다.

마법사를 이용하여 코드를 생성할때 생성된 코드를 제대로 이해하지 않고 사용하면 지금과 같은 문제가 발생한다는 말이였다. 아무리 책을 많이 읽고 "흠.. 그렇지" 라고 동의를 했더라도, 이렇듯 직접 문제에 직면하지 않으면 아무런 도움이 안되는듯 싶다. (표현이 너무 강한듯..)

 

Posted by 짱가쟁이