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