Java 如何使 JTextArea 可从不同的地方访问 class 并写入整数
Java how to make JTextArea Accesible from different class and write in integer
我想知道如何使我的 JTextArea
全局化,以及如何使用它来写入整数结果?
我正在尝试使用 linked link 实现为队列编写程序,但我实际上并没有使用 LinkedList
class。我的项目中有两个不同的 classes。有一个 class 是 deneme2
。在那个 class 我有队列方法。在第二个 class 中,我有 JFrame
,所以我想在 JTextArea
中得到我的入队和出队结果。到目前为止,我只能使用 println
但无法将其放入 JTextArea
.
这是我的deneme4
class
public class Deneme4 extends JFrame {
public static void main(String a[]) throws FileNotFoundException {
SecondFrame frame = new SecondFrame();
}}
这是我尝试制作的 GUI Queue
class
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);
}}
这个问题有很多可能的解决方案。这就是我处理它的方式:
在 class deneme2 中创建一个名为 MessageOutput 的接口,如下所示:
public class deneme2 {
public static interface MessageOutput {
void appendMessage(String message);
}
}
并且在同一个 class 中,您需要对 MessageOutput 的引用,以便您可以将消息附加到它。让我们将它初始化为一些默认实现,以防以后没有人设置它:
private MessageOutput msgOutput = new MessageOutput() {
@override
public void appendMessage(String message) {
System.out.println(message);
}
};
因此您需要 setter 到 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 用作局部变量,必须将其设为 MainFrame 的属性:
public class MainFrame implements deneme2.MessageOutput {
@override
public void appendMessage(String message) {
txt2.append(message);
}
}
最后,更新 main() 方法以将 MainFrame 传递给 deneme2 实例:
MainFrame frame = new MainFrame();
queue.setMessageOutput(frame);
并且您应该在创建 MainFrame 之后开始处理队列。
我想知道如何使我的 JTextArea
全局化,以及如何使用它来写入整数结果?
我正在尝试使用 linked link 实现为队列编写程序,但我实际上并没有使用 LinkedList
class。我的项目中有两个不同的 classes。有一个 class 是 deneme2
。在那个 class 我有队列方法。在第二个 class 中,我有 JFrame
,所以我想在 JTextArea
中得到我的入队和出队结果。到目前为止,我只能使用 println
但无法将其放入 JTextArea
.
这是我的deneme4
class
public class Deneme4 extends JFrame {
public static void main(String a[]) throws FileNotFoundException {
SecondFrame frame = new SecondFrame();
}}
这是我尝试制作的 GUI Queue
class
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);
}}
这个问题有很多可能的解决方案。这就是我处理它的方式:
在 class deneme2 中创建一个名为 MessageOutput 的接口,如下所示:
public class deneme2 {
public static interface MessageOutput {
void appendMessage(String message);
}
}
并且在同一个 class 中,您需要对 MessageOutput 的引用,以便您可以将消息附加到它。让我们将它初始化为一些默认实现,以防以后没有人设置它:
private MessageOutput msgOutput = new MessageOutput() {
@override
public void appendMessage(String message) {
System.out.println(message);
}
};
因此您需要 setter 到 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 用作局部变量,必须将其设为 MainFrame 的属性:
public class MainFrame implements deneme2.MessageOutput {
@override
public void appendMessage(String message) {
txt2.append(message);
}
}
最后,更新 main() 方法以将 MainFrame 传递给 deneme2 实例:
MainFrame frame = new MainFrame();
queue.setMessageOutput(frame);
并且您应该在创建 MainFrame 之后开始处理队列。