将方法结果添加到窗口/框架

时间:2017-01-11 23:18:45

标签: java swing jframe

我的程序目前有效。它显示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() {
      } 
}

2 个答案:

答案 0 :(得分:1)

  

我尝试了添加JTextArea和JLabel的几个想法,但是当我尝试在ActionPerformed方法中添加或附加它们时..

虽然可能动态地将组件添加到现有GUI,但要使其正常工作有点棘手,我觉得有更好的策略。其中一个策略是:

  • pack()
  • 之前添加组件 添加所有组件后,
  • setVisible(true)
  • 在用户或GUI操作后更新组件的文本内容或状态

答案 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);

程序编译完美。