2014-03-26 61 views
0

我有一個JDialog形式開始的JComboBox:激活的ActionListener上的JComboBox setSelectedItem()

myJComboBox = new JComboBox(itemOfBox); 
myJpanel.add(myJComboBox); 

當我不在乎我的默認itemOfBox是,我在默認情況下顯示出一些JSliders。

當我從JDialog用戶界面更改我的itemOfBox時,我在myJComboBox上有一個ActionListener,它在itemOfBox(範圍,默認值等)的函數中更改JSliders。 到目前爲止,所有作品fince,因爲我不關心我的默認itemOfBox。

現在我想保留所有這些工作,但要補充的是,如果我有一個requiredItemOfBox,爲了能夠設置myJComboBox它,而且還要激活myJComboBox上的新的itemOfBox上的ActionListener(這是我的requiredItemOfBox現在)

myJComboBox.setSelectedItem(requiredItemOfBox); 

所以,當我沒有requiredItemOfBox(在這種情況下,它的「」,所以前行無助於節目),我有我的JComboBox的第一項爲默認值和默認的JSliders,當我選擇列表中的另一個項目時,我有我的ActionListener來照顧它。

當我有requiredItemOfBox(!),我設法使我的JDialog選擇它,但我每次有時間就可以再次點擊更新我的JSliders。

我該如何解決這個問題?

謝謝你的幫助和對我的英語抱歉。

+0

請提供[MCVE](http://stackoverflow.com/help/mcve)。目前還不清楚你有什麼和你想要什麼。 – user1803551

回答

1

我在這裏猜測。

既然你設置所選的項目,你可以自己執行動作偵聽器代碼。訣竅是從我的一個項目中編寫你的動作監聽器。

package com.ggl.crossword.controller; 

import java.awt.Graphics2D; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.image.BufferedImage; 
import java.awt.image.RenderedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JFileChooser; 
import javax.swing.JPanel; 
import javax.swing.filechooser.FileFilter; 
import javax.swing.filechooser.FileNameExtensionFilter; 

import com.ggl.crossword.view.CrosswordFrame; 

public class CreateImageActionListener implements ActionListener { 

    private CrosswordFrame frame; 

    private JPanel panel; 

    public CreateImageActionListener(CrosswordFrame frame, 
      JPanel panel) { 
     this.frame = frame; 
     this.panel = panel; 
    } 

    @Override 
    public void actionPerformed(ActionEvent event) { 
     writeImage(); 
    } 

    public void writeImage() { 
     FileFilter filter = 
       new FileNameExtensionFilter("PNG file", "png"); 
     JFileChooser fc = new JFileChooser(); 
     fc.setFileFilter(filter); 
     int returnValue = fc.showSaveDialog(frame.getFrame()); 
     if (returnValue == JFileChooser.APPROVE_OPTION) { 
      File file = fc.getSelectedFile(); 
      if (!file.getAbsolutePath().endsWith(".png")) { 
       file = new File(file.getAbsolutePath() + ".png"); 
      } 
      RenderedImage image = createImage(panel); 
      try { 
       ImageIO.write(image, "png", file); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    private BufferedImage createImage(JPanel panel) { 
     int w = panel.getWidth(); 
     int h = panel.getHeight(); 
     BufferedImage bi = new BufferedImage(w, h, 
       BufferedImage.TYPE_INT_RGB); 
     Graphics2D g = bi.createGraphics(); 
     panel.paint(g); 
     g.dispose(); 
     return bi; 
    } 

} 

您會將偵聽器實例保留爲類字段並執行listener.writeImage()。通過這種方式,您可以執行動作偵聽器代碼,而無需觸發動作偵聽器本身。

+0

我不認爲我理解如何做到這一點。在我的程序中,我有「myJComboBox.addActionListener(new ActionListener(){...」),當我點擊我的JComboBox的一個項目時激活它,如果可能,我想默認激活它。也許如果我有我的requiredItemOfBox ,做一個doClick()的東西?但是我不能在一個requiredItemOfBox上做doClick(),因爲它是一個String,既不在myJComboBox上。 – user3450862

+0

@ user3450862:你根本不激活動作監聽器。動作偵聽器方法,正如我在代碼示例中所示。 –