Monday, July 2, 2012

Java: Add icon to a JPanel



Using a JLabel as a container

    private Icon iconMcLogo = new ImageIcon(getClass().getResource("control/mclogo.png"));
    private final JLabel lbMcLogo = new JLabel("    ");

Constructor:
        lbMcLogo.setIcon(iconMcLogo);
        panel.add(lbMcLogo);


Something more than that

 package com.marinecyb.arch.nbm.videograbber;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;

public class CameraConfig extends JPanel{

    private Icon iconMcLogo = new ImageIcon(getClass().getResource("control/mclogo.png"));
    private final JLabel lbMcLogo = new JLabel("    ");

    private final JLabel lbFps = new JLabel("FPS");
    private final JLabel lbCameraSize = new JLabel("Size");
    private final JComboBox cbCameras = new JComboBox();
    private final JComboBox cbFps = new JComboBox();
    private final JComboBox cbCameraSize = new JComboBox();
    private final JButton btRefreshCameras = new JButton("Refresh");
    private final JButton btAdvancedProperties = new JButton("Advanced Properties");
    private String sSelectedCamera = "";
    private static String[] cameraList;
    private static String[] fpsList = {"25", "30"};
    private static String[] sizeListMS = {"640x480", "800x600", "1024x768", "1280x720"};
    private static String[] sizeListHP = {"640x480", "800x600", "1024x768", "1280x720"};
    private static String[] sizeListStandard = {"640x480", "800x600", "1024x768"};

    public CameraConfig(){
        super();

        lbMcLogo.setIcon(iconMcLogo);
        updateCameras();
        initFps();
        updateSize();

        btRefreshCameras.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                updateCameras();
            }
        });

        cbCameras.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                sSelectedCamera = (String)cbCameras.getSelectedItem();
                if(sSelectedCamera != null){
                    MediaProperties.setCameraName((String)cbCameras.getSelectedItem());
                }
            }
        });

        cbFps.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                MediaProperties.setFrameRate(Integer.parseInt((String)(String)cbFps.getSelectedItem()));
            }
        });

        cbCameraSize.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                MediaProperties.setImageSize((String)cbCameraSize.getSelectedItem());
            }
        });

        btAdvancedProperties.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new CameraInfoProvider().showAdvancedProperties(MediaProperties.getCameraIndex());
            }
        });

        addControls();
    }

    private void updateCameras(){
        cameraList = new CameraInfoProvider().getConnectedCameras();
        cbCameras.removeAllItems();
        String sCameraName = MediaProperties.getCameraName();
        int iFound = -1;
        for(int i = 0; i < cameraList.length; i++){
            cbCameras.addItem(cameraList[i]);
           
            if(sCameraName != null && sCameraName.contains(cameraList[i]))
                iFound = i;
        }

        if(iFound >= 0)
            cbCameras.setSelectedItem(MediaProperties.getCameraName());
        else{
            cbCameras.setSelectedIndex(0);
            MediaProperties.setCameraName((String)cbCameras.getSelectedItem());
        }

        sSelectedCamera = (String)cbCameras.getSelectedItem();
    }

    private void initFps(){
        int iFps = MediaProperties.getFrameRate();
        for(int i = 0; i < fpsList.length; i++){
            cbFps.addItem(fpsList[i]);
            if(iFps == Integer.parseInt(fpsList[i]))
                cbFps.setSelectedIndex(i);
        }
    }

    private void updateSize(){
        int localWidth = MediaProperties.getImageWidth();
        int localHeight = MediaProperties.getImageHeight();
        String localSize = String.valueOf(localWidth) + "x" + String.valueOf(localHeight);

        if(cbCameraSize != null)
            cbCameraSize.removeAllItems();
        if(sSelectedCamera == null){
            return;
        }
        if (sSelectedCamera.contains("Microsoft")){
            for(int i = 0; i < sizeListMS.length; i++)
                cbCameraSize.addItem(sizeListMS[i]);
        }
        else if (sSelectedCamera.contains("HP")){
            for(int i = 0; i < sizeListHP.length; i++)
                cbCameraSize.addItem(sizeListHP[i]);
        }
        else{
            for(int i = 0; i < sizeListStandard.length; i++)
                cbCameraSize.addItem(sizeListStandard[i]);
        }

        cbCameraSize.setSelectedItem(localSize);
    }

    public void addControls(){
        this.add(lbMcLogo);
        this.add(btRefreshCameras);
        this.add(cbCameras);
        this.add(lbFps);
        this.add(cbFps);
        this.add(lbCameraSize);
        this.add(cbCameraSize);
        this.add(btAdvancedProperties);
    }

    public void toggle(){
        this.setVisible(!this.isVisible());
    }
}

No comments:

Post a Comment