Java如何使JTextArea从不同的类访问并写入整数

我想知道如何使我的JTextArea全局,以及如何使用它作为整数写入结果?Java如何使JTextArea从不同的类访问并写入整数

我正在尝试使用链接链接实现队列的程序,但实际上并没有使用LinkedList类。我的项目中有两个不同的类。有一类是deneme2。在那个类中我有队列方法。在第二节课中,我有JFrame,所以我想让我的入队和出球结果为JTextArea。到目前为止,我只能使用println,但无法设法进入JTextArea

这是我deneme4

public class Deneme4 extends JFrame { 

public static void main(String a[]) throws FileNotFoundException {

SecondFrame frame = new SecondFrame();

}}

这是Queue类的GUI我试图让

public class Queue { 

public static interface MessageOutput {

void appendMessage(String message);

void appendHead(String message);

}

private MessageOutput msgOutput = new MessageOutput() {

@Override

public void appendMessage(String message) {

System.out.println(message);

}

@Override

public void appendHead(String head) {

System.out.println(head);

}

};

public void setMessageOutput(MessageOutput value) {

msgOutput = value;

}

public void setHeadOutput(MessageOutput value) {

msgOutput = value;

}

private Node front, rear;

private int currentSize;

private class Node {

int data;

Node next;

}

public Queue() {

front = null;

rear = null;

currentSize = 0;

}

public boolean isEmpty() {

if (currentSize == 0) {

msgOutput.appendMessage("Que is Empty\n");

}

return currentSize == 0;

}

public int dequeue() {

int data = front.data;

front = front.next;

if (isEmpty()) {

rear = null;

}

currentSize--;

msgOutput.appendMessage(data + " removed from the queue\n");

return data;

}

public int enqueue(int data) throws FileNotFoundException {

Node oldRear = rear;

rear = new Node();

rear.data = data;

rear.next = null;

if (isEmpty()) {

front = rear;

} else {

oldRear.next = rear;

}

currentSize++;

msgOutput.appendMessage(data + " added to the queue\n");

return data;

}

public int queueSize() {

msgOutput.appendMessage("Size of the Que is" + currentSize + "\n");

return currentSize;

}

public int getHead() {

int data = front.data;

msgOutput.appendHead("Head of the Que is " + data + "\n");

return data;

}}

,这是我QueueFrame我希望当按钮点击它输出价值txt1,但似乎不能这样做

public class QueueFrame extends JFrame implements Queue.MessageOutput { 

private JTextArea txt1;

private JTextArea txt2;

private JTextArea txt3;

private JButton b1;

private JButton b2;

private Queue queue = new Queue();

public static interface MessageOutput {

void appendMessage(String message);

void appendHead(String message);

}

private MessageOutput msgOutput = new MessageOutput() {

@Override

public void appendMessage(String message) {

System.out.println(message);

}

@Override

public void appendHead(String head) {

System.out.println(head);

}

};

public void setMessageOutput(MessageOutput value) {

msgOutput = value;

}

public void setHeadOutput(MessageOutput value) {

msgOutput = value;

}

@Override

public void appendHead(String head) {

txt2.append(head);

}

public QueueFrame() throws FileNotFoundException {

JFrame frame = new JFrame();

b1 = new JButton("Load up the Que");

b1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent ae) {

try {

Scanner s = new Scanner(new File("list.txt"));

while (s.hasNext()) {

queue.setMessageOutput((Queue.MessageOutput) queue.

queue.enqueue(s.nextInt());

}

s.close();

queue.queueSize();

queue.getHead();

} catch (FileNotFoundException ex) {

Logger.getLogger(QueueFrame.class.getName()).log(Level.SEVERE, null, ex);

}

}

});

b2 = new JButton("Head of the Que");

b2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent ae) {

queue.getHead();

}

});

txt1 = new JTextArea();

txt2 = new JTextArea();

txt3 = new JTextArea();

txt1.setEditable(false);

txt2.setEditable(false);

txt3.setEditable(true);

b1.setBounds(50, 100, 180, 100);

b2.setBounds(50, 300, 180, 100);

txt1.setBounds(600, 100, 200, 600);

txt2.setBounds(300, 300, 180, 100);

txt3.setBounds(300, 100, 180, 100);

frame.add(b1);

frame.add(b2);

frame.add(txt1);

frame.add(txt2);

frame.add(txt3);

frame.setLayout(null);

frame.setSize(1000, 1500);

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

}}

回答:

这个问题有很多可能的解决方案。这是我想接近它的方式:

创建一个名为MessageOutput类deneme2内像这样的接口:

public class deneme2 { 

public static interface MessageOutput {

void appendMessage(String message);

}

}

而且在同一个班,你需要将MessageOutput的引用,以便您可以追加消息。让我们把它初始化为的情况下,一些默认实现无人设置后:

​​

所以你需要一个二传手的msgOutput领域:

public void setMessageOutput(MessageOutput value) { 

msgOutput = value;

}

所以你现在可以改变所有的println代码使用MessageOutput的appendMessage()方法:

public int dequeue() { 

. . .

msgOutput.appendMessage(data + " removed from the queue");

return data;

}

然后让MainFrame实现deneme2.MessageOutput。请注意,您可以不再使用的JTextArea作为一个局部变量,你必须让主机的属性:

public class MainFrame implements deneme2.MessageOutput { 

@override

public void appendMessage(String message) {

txt2.append(message);

}

}

最后,更新main()方法的主机传递到deneme2实例:

MainFrame frame = new MainFrame(); 

queue.setMessageOutput(frame);

而且您应该在创建MainFrame后开始处理队列。

以上是 Java如何使JTextArea从不同的类访问并写入整数 的全部内容, 来源链接: utcz.com/qa/258880.html

回到顶部