gpt4 book ai didi

java - JButtons-无法输入

转载 作者:行者123 更新时间:2023-11-30 06:43:59 24 4
gpt4 key购买 nike

我这个学期正在大学的项目上工作。我已经制作了 3 个方法,这些方法在我添加 JButtons 之前工作正常。我通过这些按钮调用它们。这些方法正在等待来自用户(我使用扫描仪,并且我也尝试过 BufferReader),但现在程序停止运行,我无法在终端写入。而且我没有收到任何类型的错误BlueJ.Here 是 JButtons 的代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Window extends JFrame implements ActionListener {

JButton b1 = new JButton("Load from file");
JButton b2 = new JButton("Save to file");
JButton b3 = new JButton("Add hotel and resrvations");
JButton b4 = new JButton("Search hotel by id");
JButton b5 = new JButton("Search reservation by name");

Main m0 = new Main();

public Window(Main main0) {
super("Management");//Name
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);

FlowLayout flow = new FlowLayout();
setLayout(flow);


add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
pack();

setVisible(true);

m0 = main0;
}

public void actionPerformed(ActionEvent ae) {
Object source = ae.getSource();
if(source == b1) {
m0.loadFile();

}else if(source == b2) {
m0.saveFile();

}else if(source == b3) {
m0.addHotel();

}else if(source == b4) {
m0.searchById();

}else if(source == b5) {
m0.searchByName();
}
}}

更简化的代码会导致相同的问题

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Window extends JFrame implements ActionListener {

JButton b1 = new JButton("Get input");
Main m0 = new Main();

public Window(Main main0) {
super("Management");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

b1.addActionListener(this);

FlowLayout flow = new FlowLayout();
setLayout(flow);
add(b1);

pack();

setVisible(true);

m0 = main0;
}

public void actionPerformed(ActionEvent ae) {
Object source = ae.getSource();
if(source == b1) {
m0.userInput();

}
}

}

还有一个简单的主

    import java.io.*;
import java.util.*;

public class Main{

public void userInput(){
Scanner scan = new Scanner(System.in);

System.out.println("Give hotel's name : ");
String name = scan.nextLine();

System.out.println(name);
}

public static void main(){
Main m0 = new Main();
Window w = new Window(m0);
}
}

问题出现在最后 3 个方法上。这些方法存在于 Main 类中。感谢您的宝贵时间!

最佳答案

图形用户界面工作正常:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Window extends JFrame implements ActionListener {

JButton b1 = new JButton("Load from file");
JButton b2 = new JButton("Save to file");
JButton b3 = new JButton("Add hotel and resrvations");
JButton b4 = new JButton("Search hotel by id");
JButton b5 = new JButton("Search reservation by name");

Main m0 ;

public Window(Main main0) {

super("Management");//Name
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);

FlowLayout flow = new FlowLayout();
setLayout(flow);

add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
pack();

setVisible(true);

m0 = main0;
}

@Override
public void actionPerformed(ActionEvent ae) {

Object source = ae.getSource();
if(source == b1) {
m0.loadFile();
}else if(source == b2) {
m0.saveFile();
}else if(source == b3) {
m0.addHotel();
}else if(source == b4) {
m0.searchById();
}else if(source == b5) {
m0.searchByName();
}
}

public static void main(String[] args) {
new Window(new Main());
}
}

class Main {

public void loadFile() {
System.out.println("loadFile pressed");
}

public void searchByName() {
System.out.println("searchByName pressed");
}

public void searchById() {
System.out.println("searchById() pressed");
}

public void addHotel() {
System.out.println("addHotel pressed");
}

public void saveFile() {
System.out.println("saveFile pressed");
}
}

所以问题一定出在未发布的 Main 中。始终考虑发布mcve

编辑发布的 mcve 也可以正常工作:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;


public class Main{

public void userInput(){
Scanner scan = new Scanner(System.in);

System.out.println("Give hotel's name : ");
String name = scan.nextLine();

System.out.println(name);
}

public static void main(String[] args){ //added String[] args
Main m0 = new Main();
Window w = new Window(m0);
}
}

class Window extends JFrame implements ActionListener {

JButton b1 = new JButton("Get input");
Main m0 = new Main();

public Window(Main main0) {
super("Management");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

b1.addActionListener(this);

FlowLayout flow = new FlowLayout();
setLayout(flow);
add(b1);

pack();

setVisible(true);

m0 = main0;
}

@Override
public void actionPerformed(ActionEvent ae) {
Object source = ae.getSource();
if(source == b1) {
m0.userInput();
}
}
}

输出按预期显示在控制台上:

Give hotel's name :
The Crown Hotel
The Crown Hotel

关于java - JButtons-无法输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43966068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com