2015-04-16 148 views
0

我正在擴展Java中的圖像編輯應用程序。我想創建一個可以調整圖像對比度的類。主類調用應用方法並傳遞必須修改的圖像。我設法創建了用於計算的JFrame和算法,但是Action Listener有問題,因爲我不知道如何讓我的apply方法等待用戶輸入,然後才計算和編輯圖像。下面是對比類的代碼:JFrame和ActionListener;等待用戶輸入

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

lic class ContrastFilter extends Filter implements ActionListener { 

private JFrame contFr; 
private JButton ok; 
private JTextField textF; 
private String s; 
private int contV; 
private int factor; 


public ContrastFilter(String name){ 
    super(name); 

} 

public void makeFrame(){ 
    contFr = new JFrame("contrast window"); 
    Container contentPane = contFr.getContentPane(); 
    contentPane.setLayout(new FlowLayout()); 
    JLabel label = new JLabel("Enter contrast"); 
    contentPane.add(label, BorderLayout.PAGE_START); 
    textF = new JTextField(5); 
    contentPane.add(textF, BorderLayout.PAGE_START); 
    ok = new JButton("OK"); 
    ok.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent event) 
     { 
      if (event.getSource() == ok){ 
       s = textF.getText(); 
       contV = Integer.parseInt(s); 
       factor = Math.round((259*(contV+255))/(255*(259 - contV))); 


     }} 
    });  
    contentPane.add(ok, BorderLayout.PAGE_START); 
    contFr.pack(); 
    contFr.setVisible(true); 
} 


public void apply(OFImage image) { 
    makeFrame(); 


    int height = image.getHeight(); 
    int width = image.getWidth(); 

    for(int y = 0; y < height; y++) { 
     for(int x = 0; x < width; x++) { 
      Color pix = image.getPixel(x, y); 
      image.setPixel(x, y, new Color(trunC(factor*(pix.getRed()-128)+128), 
              trunC(factor*(pix.getGreen()-128)+128), 
              trunC(factor*(pix.getBlue()-128)+128))); 
     } } } 




public int trunC(int a){ 
    if (a>255){ 
     return 255; 
    } 

    return a; 
} 

} 
+0

使用模態對話框 – MadProgrammer

回答

0

如果你希望你的apply()方法按鈕後做事「OK」被點擊(用戶輸入一些東西,然後點擊OK),那麼你就需要把apply()調用成你的ActionListener的actionPerformed()方法體。

+0

或使用模態對話框 – MadProgrammer