2011-07-04 22 views
0

我創建了兩個選項的組合框:在JPanel中隱藏和顯示。我想知道如何編寫動作偵聽器,因此當從下拉列表中選擇「顯示」時,組合框旁邊會出現一張圖片,並在選擇「隱藏」時將其隱藏。提前謝謝了。 以下是我到目前爲止所做的。Combbox動作偵聽器顯示和隱藏圖像

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

我給了你一個鏈接到教程的原因。閱讀教程並按照給出的示例代碼。是的,它可以做更多的工作,因爲你不能複製勺子餵食的代碼,但是你學得更多,甚至不需要創建任何自定義類來繪製圖像。 – camickr

+0

是我做到了這一點是專業的方式來做到這一點,他選擇了我的答案,因爲我花時間給他寫了很好的乾淨的代碼,很容易閱讀。 – gsfd

回答

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();} 
} 
+0

非常感謝。 – DGT

+0

沒問題,我希望它有幫助! – gsfd

+0

嗯,這是如何編程10年,這就是我這樣做,我使用空佈局禁用佈局管理器,所以我可以把面板,無論我想要的地方,我重寫油漆,這樣我就可以繪製圖像,每次重繪()被調用,我確定你有自己的做事方式,但那是我怎麼做的。 – gsfd

0

閱讀JComboBox的API,並按照鏈接到一節中的「如何使用組合框」 Swing的教程。它已經從圖片列表中選擇的一個例子。我敢肯定,你可以修改它做你想要的。

如果您需要更多的幫助,然後發佈SSCCE演示該問題。

+0

謝謝,camickr。 – DGT