Java JFrame和ActionListener;等待用户输入

Java JFrame和ActionListener;等待用户输入,java,swing,jframe,actionlistener,Java,Swing,Jframe,Actionlistener,我正在用Java扩展图像编辑应用程序。我想制作一个类来调整图像的对比度。主类调用apply方法并传递必须修改的图像。我设法创建了用于计算的JFrame和算法,但我在Action Listener方面遇到了问题,因为我不知道如何让我的apply方法等待用户输入,然后才计算和编辑图像。以下是对比度类的代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; lic class ContrastFilter exte

我正在用Java扩展图像编辑应用程序。我想制作一个类来调整图像的对比度。主类调用apply方法并传递必须修改的图像。我设法创建了用于计算的JFrame和算法,但我在Action Listener方面遇到了问题,因为我不知道如何让我的apply方法等待用户输入,然后才计算和编辑图像。以下是对比度类的代码:

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;
}

}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
lic类ContractFilter扩展过滤器实现ActionListener{
私有JFrame-contFr;
私人JButton ok;
私有JTextField textF;
私有字符串;
私人内部控制;
私人智力因素;
公共过滤器(字符串名称){
超级(姓名);
}
公共void makeFrame(){
contFr=新JFrame(“对比度窗口”);
容器contentPane=contFr.getContentPane();
setLayout(新的FlowLayout());
JLabel标签=新的JLabel(“输入对比度”);
contentPane.add(标签、边框布局、页面开始);
textF=新的JTextField(5);
contentPane.add(textF,BorderLayout.PAGE_START);
ok=新的按钮(“ok”);
好的。addActionListener(新的ActionListener(){
已执行的公共无效操作(操作事件)
{
if(event.getSource()==ok){
s=textF.getText();
contV=整数.parseInt(s);
因子=数学四舍五入((259*(contV+255))/(255*(259-contV));
}}
});      
contentPane.add(确定,BorderLayout.PAGE_START);
contFr.pack();
contFr.setVisible(真);
}
公共无效应用(OFImage图像){
makeFrame();
int height=image.getHeight();
int width=image.getWidth();
对于(int y=0;y255){
返回255;
}
返回a;
}
}

如果您希望您的
apply()
方法在单击“确定”按钮后工作(用户输入一些内容,然后单击“确定”),那么您需要将
apply()
调用放入ActionListener的
actionPerformed()
方法体。

或使用模式对话框