JFrame和ActionListener;等待用户输入



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

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

如果您希望apply()方法在单击按钮"确定"后工作(用户输入某些内容,然后单击确定),则需要在ActionListener的actionPerformed()方法主体中放置apply()调用。

最新更新