开发者

Combbox action listener to show and hide an image

开发者 https://www.devze.com 2023-03-17 18:53 出处:网络
I\'ve created a combobox with two options: Hide and Show inside a JPanel. I want to know how I can write an action listener, so when I select \"Show\" from the drop-down, a picture appears next to the

I've created a combobox with two options: Hide and Show inside a JPanel. I want to know how I can write an action listener, so when I select "Show" from the drop-down, a picture appears next to the combobox, and hides it when "Hide" is select. Many thanks in advance. Following is what I've got so far.

myPanel = new javax.swing.JPanel();
myLabel = new javax.swing.JLabel();
myComboBox = new javax.swing.JComboBox();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

myLabel.setText("myLabel:");

myComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Hide", "Show" }));

javax.swing.GroupLayout myPanelLayout = new javax.swing.GroupLayout(myPanel);
myPanel.setLayout(myPanelLayout);
myPanelLayout.setHorizontalGroup(
    myPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(myPanelLayout.createSequentialGroup()
.addGap(28, 28, 28)
.addComponent(myLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(myComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(237, 237, 237))
);
myPanelLayout.setVerticalGroup(
    myPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(myPanelLayout.createSequentialGroup()
.addGap(44, 44, 44)
.addGroup(myPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(myLabel)
    .addComponent(myComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap开发者_StackOverflow社区(36, Short.MAX_VALUE))
);


Ok so i think i understand what you wanted to do so i threw some code together in my eclipse, i hope this helps you in some way!

package com.detter.john;

import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;

public final class ComboBoxExample extends JFrame implements ActionListener
{
    public ComboBoxExample()
    {
        super("Combo Box Example");
        setLayout(null);
        panel = new JPanel();

        box = new JComboBox(options);
        box.addActionListener(this);

        panel.add(box);
        panel.setSize(100,100);
        panel.setLocation(0,0);
        panel.setVisible(true);

        imagePanel = new ImagePanel();
        add(panel);
        add(imagePanel);

        setSize(WIDTH,HEIGHT);
        setLocation(X,Y);
        setResizable(false);
        setVisible(true);
    }

    public class ImagePanel extends JPanel
    {
        public ImagePanel()
        {
            try
            {
                showing = true;
                image = ImageIO.read(new File("..\\Combobox action listener to show" +
                    " and hide an image\\Images\\SampleImage.PNG"));
            }catch(Exception e){e.printStackTrace();}

            setSize(WIDTH,HEIGHT);
            setLocation(X,Y);
            setVisible(true);
        }

        public void showImage()
        {
            showing = true;
            repaint();
        }

        public void hideImage()
        {
            showing = false;
            repaint();
        }

        public void paint(Graphics g)
        {
            Graphics2D g2 = (Graphics2D)g;
            g2.clearRect(0,0,WIDTH,HEIGHT);
            if(showing)
                g2.drawImage(image,0,0,null);
        }

        private boolean showing;
        private BufferedImage image;

        private static final int WIDTH = 100;
        private static final int HEIGHT = 100;
        private static final int X = 100;
        private static final int Y = 0;
    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==box)
        {
            switch(box.getSelectedIndex())
            {
                case SHOW:
                    imagePanel.showImage();
                break;
                case HIDE:
                imagePanel.hideImage();
                break;
            }
        }
   }

    private JPanel panel;
    private ImagePanel imagePanel;
    private JComboBox box;
    private String options[] = {"show","hide"};

    private static final int SHOW = 0;
    private static final int HIDE = 1;

    private static final int X = 0;
    private static final int Y = 0;
    private static final int WIDTH = 206;
    private static final int HEIGHT = 132;

    public static void main(String args[]){new ComboBoxExample();}
}


Read the JComboBox API and follow the link to the section in the Swing tutorial on 'How to Use Combo Boxes". It has an example of selecting from a list of pictures. I'm sure you can modify it to do what you want.

If you need more help then post your SSCCE that demonstrates the problem.

0

精彩评论

暂无评论...
验证码 换一张
取 消