Java 动作侦听器不工作
我不熟悉java swing 当我想将actionlistener设置为其中一个按钮时,它必须获取textArea内容并将其发送到另一个类。它没有以我所期望的方式工作 相反,当我更改文本区域的内容时,它会起作用,我不知道发生了什么 我命名为按钮的第一个按钮,当我在名为Clac的按钮actionlistener中使用另一个actionlistener时,发生了相同的问题 这是我的密码:Java 动作侦听器不工作,java,swing,Java,Swing,我不熟悉java swing 当我想将actionlistener设置为其中一个按钮时,它必须获取textArea内容并将其发送到另一个类。它没有以我所期望的方式工作 相反,当我更改文本区域的内容时,它会起作用,我不知道发生了什么 我命名为按钮的第一个按钮,当我在名为Clac的按钮actionlistener中使用另一个actionlistener时,发生了相同的问题 这是我的密码: package FFT; import java.awt.BorderLayout; import java.
package FFT;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class FFT_Main_Frame extends JFrame {
JLabel label;
JButton button;
TextPanel txtPanel;
JButton Button;
JLabel label1;
//JTextArea[] BoxArray;
makePolynomial mp;
JButton Calc;
Complex[] Nums;
Complex[] Result;
int input;
FFT_Main fft_main;
ShowResult shr;
public FFT_Main_Frame()
{
super ("F F T");
//final int input;
label=new JLabel();
txtPanel=new TextPanel();
Button=new JButton("OK");
label.setText("Please Enter your Polynomial Degree");
setLayout(new FlowLayout());
add(label);
add(txtPanel);
add(Button);
Calc=new JButton("Claculate");
Button.addActionListener(new ActionListener()
{
//Test t;
//Integer content;
@Override
public void actionPerformed(ActionEvent arg0) {
try{
Integer content=new Integer(Integer.parseInt(txtPanel.getTextArea()));
input=content;
System.out.println(input);
//inputt=input;
mp=new makePolynomial(content);
setLayout(new FlowLayout());
add(mp);
//setLayout(new BorderLayout());
add(Calc);
Nums=new Complex[input+1];
Calc.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0) {
for(int i=input;i>=0;i--)
{
Nums[i]=new Complex(Double.parseDouble(mp.BoxArray[2*(i+1)- 1].getText()),Double.parseDouble(mp.BoxArray[2*i].getText()));
}
for (int i=0;i<=input;i++)
{
System.out.println(Nums[i]);
}
fft_main=new FFT_Main();
Result=new Complex[input];
Result=fft_main.Recursive_FFT(Nums);
shr=new ShowResult(Result);
setLayout(new BorderLayout());
add(shr,BorderLayout.CENTER);
System.out.println("Result\n\n");
for (int i=0;i<=input;i++)
{
System.out.println(Result[i]);
}
}
});
}
catch (NumberFormatException exception)
{
JOptionPane.showMessageDialog(null, "Please Enter Just Numbers! " , "Wrong Value", JOptionPane.ERROR_MESSAGE);
}
}
}
);
//Integer k=new Integer(Integer.parseInt(txtPanel.getTextArea()));
//System.out.println();
//Nums=new Complex[input+1];
setSize(600,500);
setVisible(true);
}
}
包FFT;
导入java.awt.BorderLayout;
导入java.awt.FlowLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
公共类FFT_主框架扩展了JFrame{
JLabel标签;
按钮;
TextPanel txtPanel;
按钮;
JLabel标签1;
//JTextArea[]BoxArray;
makemp;
JButton-Calc;
复杂[]Nums;
复杂的结果;
int输入;
FFT_Main FFT_Main;
显示结果shr;
公共FFT_主框架()
{
超级(“F T”);
//最终整数输入;
label=新的JLabel();
txtPanel=newtextpanel();
按钮=新按钮(“确定”);
label.setText(“请输入多项式次数”);
setLayout(新的FlowLayout());
添加(标签);
添加(TXT面板);
添加(按钮);
Calc=新按钮(“Claculate”);
addActionListener(新建ActionListener())
{
//试验t;
//整数内容;
@凌驾
已执行的公共无效操作(操作事件arg0){
试一试{
整数内容=新整数(Integer.parseInt(txtPanel.getTextArea());
输入=内容;
系统输出打印项次(输入);
//输入=输入;
mp=新的生成多项式(内容);
setLayout(新的FlowLayout());
添加(mp);
//setLayout(新的BorderLayout());
添加(计算);
Nums=新复合体[输入+1];
Calc.addActionListener(新ActionListener()
{
@凌驾
已执行的公共无效操作(操作事件arg0){
对于(int i=input;i>=0;i--)
{
Nums[i]=new Complex(Double.parseDouble(mp.BoxArray[2*(i+1)-1].getText()),Double.parseDouble(mp.BoxArray[2*i].getText());
}
对于(int i=0;i=1)
{
标签[b-1]=新的JLabel();
标签[b-1].setText(“IX”+b+”);
添加(标签[b-1]);
}
如果(b==0)
{
JLabel l1=新的JLabel();
l1.setText(“我”);
添加(l1);
}
b--;
}
}
}
展示结果类别:
package FFT;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ShowResult extends JPanel {
JLabel[] label;
public ShowResult(Complex[] c) {
label=new JLabel[c.length];
System.out.println("Complex"+c.length);
setLayout(new FlowLayout());
for (int i=0;i<c.length;i++)
{
label[i]=new JLabel();
label[i].setText("y["+i+"]= "+c[i].toString());
add(label[i]);
}
}
}
包FFT;
导入java.awt.FlowLayout;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
公共类ShowResult扩展了JPanel{
JLabel[]标签;
公开展示结果(综合体[]c){
标签=新的JLabel[c.长度];
System.out.println(“复杂”+c.长度);
setLayout(新的FlowLayout());
对于(int i=0;i作为一个代码部分较小的可运行程序的示例,请参见下文。为了保持简短,我用一个JPanel
替换了makepolymonery
类。我添加了代码以隐藏按钮的actionPerformed
方法中的三个初始组件,但我非常确定有我们有更好的方法来做到这一点
此程序是否在您的机器上按预期工作
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ActionListenerBug {
public static void main(final String[] arguments) {
SwingUtilities.invokeLater(() -> new ActionListenerBug().createAndShowGui());
}
private void createAndShowGui() {
final JFrame frame = new JFrame("Stack Overflow");
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
JLabel label = new JLabel();
// TextPanel is a class?
JTextPane txtPanel = new JTextPane();
JButton Button = new JButton("OK");
label.setText("Please Enter your Polynomial Degree");
panel.setLayout(new FlowLayout());
panel.add(label);
panel.add(txtPanel);
panel.add(Button);
Button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
int input = Integer.parseInt(txtPanel.getText());
System.out.println(input);
//mp = new makePolynomial(content);
JPanel mp = new JPanel();
mp.add(new JLabel("input: " + input));
// Hide other components for now. Showing a different panel would be
// better.
label.setVisible(false);
txtPanel.setVisible(false);
Button.setVisible(false);
panel.setLayout(new FlowLayout());
panel.add(mp);
//setLayout(new BorderLayout());
JButton Calc = new JButton("Claculate");
panel.add(Calc);
panel.revalidate();
} catch (NumberFormatException exception) {
JOptionPane.showMessageDialog(null, "Please Enter Just Numbers! ",
"Wrong Value",
JOptionPane.ERROR_MESSAGE);
}
}
});
frame.getContentPane().add(panel);
frame.setVisible(true);
}
}
有什么不符合我的期望?你期望什么?请检查如何提出好的问题,以便得到好的答案。特别是提供一个(关注最小值)重现问题-您的代码很可能包含太多不需要演示问题的内容。这也是跟踪问题的一般方法:将代码减少到绝对最小值(使用git等版本控制系统,以便跟踪更改)。您的代码乱七八糟。请尝试遵循良好的命名约定,以使其更具可读性。Button是类的名称,而不是变量。请将变量名称以小写开头,这样我们就知道您不是在引用类。请重新格式化代码,并尽可能多地删除代码,以便我们能够集中精力解决问题。否则,它将不太可能是l我相信你会得到答案。你有一个名为的JButton
按钮和另一个名为按钮
。这是一个糟糕的命名方式。用描述性的方式命名变量,并且总是以小写字母开头,然后再加上CamelCase。(因此,变量名中每个新词的开头都有一个大写字母)。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ActionListenerBug {
public static void main(final String[] arguments) {
SwingUtilities.invokeLater(() -> new ActionListenerBug().createAndShowGui());
}
private void createAndShowGui() {
final JFrame frame = new JFrame("Stack Overflow");
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
JLabel label = new JLabel();
// TextPanel is a class?
JTextPane txtPanel = new JTextPane();
JButton Button = new JButton("OK");
label.setText("Please Enter your Polynomial Degree");
panel.setLayout(new FlowLayout());
panel.add(label);
panel.add(txtPanel);
panel.add(Button);
Button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
int input = Integer.parseInt(txtPanel.getText());
System.out.println(input);
//mp = new makePolynomial(content);
JPanel mp = new JPanel();
mp.add(new JLabel("input: " + input));
// Hide other components for now. Showing a different panel would be
// better.
label.setVisible(false);
txtPanel.setVisible(false);
Button.setVisible(false);
panel.setLayout(new FlowLayout());
panel.add(mp);
//setLayout(new BorderLayout());
JButton Calc = new JButton("Claculate");
panel.add(Calc);
panel.revalidate();
} catch (NumberFormatException exception) {
JOptionPane.showMessageDialog(null, "Please Enter Just Numbers! ",
"Wrong Value",
JOptionPane.ERROR_MESSAGE);
}
}
});
frame.getContentPane().add(panel);
frame.setVisible(true);
}
}