2015-04-16 61 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