我的程序目前有效。它显示event.WQLookup()方法调用控制台的结果就好了。
我正在尝试修改代码以在窗口框架中的文本区域中显示event.WQLookup()结果。我已经尝试了添加JTextArea和JLabel的几个想法,但是当我尝试在ActionPerformed方法中添加或附加它们时,由于void不允许或者变量看起来超出范围而导致错误。
此处显示的代码显示了我使用JTextArea的追加尝试。
我觉得这很可能只是一个简单的修复,虽然我的研究引导我回到我已经尝试过的建议。我显然是Java的新手,因此我们非常感谢所有指导。
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class WQQuery extends JFrame implements WindowListener,ActionListener,Runnable {
JButton button1;
JLabel InterFaceLabel;
JLabel ErrorCodeLabel;
JTextField InterFaceField;
JTextField ErrorCodeField;
JTextArea SQLLabel;
String InterFace = "";
String ErrorCode = "";
public static void main(String[] args) throws IOException {
WQQuery window = new WQQuery("WQ Lookup");
window.setSize(400,500);
window.setVisible(true);
JTextArea SQLLabel = new JTextArea(2,20);
window.getContentPane().add(SQLLabel);
}
@SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
public WQQuery(String name) throws IOException {
super(name);
setLayout(new FlowLayout());
addWindowListener(this);
InterFaceLabel = new JLabel("Interface: ");
add(InterFaceLabel);
InterFaceField = new JTextField(10);
InterFaceField.addActionListener(this);
add(InterFaceField);
ErrorCodeLabel = new JLabel("Error Code:");
add(ErrorCodeLabel);
ErrorCodeField = new JTextField(10);
ErrorCodeField.addActionListener(this);
add(ErrorCodeField);
button1 = new JButton("Search");
add(button1);
button1.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
InterFace = InterFaceField.getText();
ErrorCode = ErrorCodeField.getText();
WQSQL event = new WQSQL(InterFace, ErrorCode);
try {
SQLLabel.append(event.WQLookup());
} catch (SQLException | ClassNotFoundException ex) {
Logger.getLogger(WQQuery.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
@Override
public void windowOpened(WindowEvent e) {}
@Override
public void windowActivated(WindowEvent e) {}
@Override
public void windowIconified(WindowEvent e) {}
@Override
public void windowDeiconified(WindowEvent e) {}
@Override
public void windowDeactivated(WindowEvent e) {}
@Override
public void windowClosed(WindowEvent e) {}
@Override
public void run() {
}
}
答案 0 :(得分:1)
我尝试了添加JTextArea和JLabel的几个想法,但是当我尝试在ActionPerformed方法中添加或附加它们时..
虽然可能动态地将组件添加到现有GUI,但要使其正常工作有点棘手,我觉得有更好的策略。其中一个策略是:
pack()
setVisible(true)
。 答案 1 :(得分:0)
密钥是“void type not allowed”消息。这意味着我正在调用一个void类型的方法并期望它返回数据。
简单的修复方法是将使用追加代码调用的方法WQLookup从void更改为String类型。一个简单的错误的简单修复。
第二个修复是将JTextArea SQLLabel初始化移动到WQQuery类:
public class WQQuery extends JFrame implements WindowListener,ActionListener,Runnable {
JButton button1;
JLabel InterFaceLabel;
JLabel ErrorCodeLabel;
JTextField InterFaceField;
JTextField ErrorCodeField;
JTextArea SQLLabel = new JTextArea(2,20);
String InterFace = "";
String ErrorCode = "";
此外,需要使用其余组件移动实际的JTextArea:
public WQQuery(String name) throws IOException {
super(name);
setLayout(new FlowLayout());
addWindowListener(this);
InterFaceLabel = new JLabel("Interface: ");
add(InterFaceLabel);
InterFaceField = new JTextField(10);
InterFaceField.addActionListener(this);
add(InterFaceField);
ErrorCodeLabel = new JLabel("Error Code:");
add(ErrorCodeLabel);
ErrorCodeField = new JTextField(10);
ErrorCodeField.addActionListener(this);
add(ErrorCodeField);
button1 = new JButton("Search");
add(button1);
add(SQLLabel);
button1.addActionListener(this);
在旁注中我还添加了一行来清除actionPerfomed方法中的文本区域:
SQLLabel.setText(null);
程序编译完美。