我创建了一个有两个选项的组合框:在JPanel中隐藏和显示。我想知道如何编写动作监听器,因此当我从下拉列表中选择“显示”时,组合框旁边会出现一张图片,并在选择“隐藏”时隐藏它。提前谢谢了。 以下是我到目前为止所做的事情。
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(36, Short.MAX_VALUE))
);
答案 0 :(得分:0)
阅读JComboBox API并按照Swing教程中关于“如何使用组合框”的部分的链接。它有一个从图片列表中选择的例子。我相信你可以修改它来做什么你想要的。
如果您需要更多帮助,请发布展示问题的SSCCE。
答案 1 :(得分:0)
好的,所以我想我明白你想做什么,所以我在日食中把一些代码放在一起,希望这能以某种方式帮助你!
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();}
}