Newer
Older
Simon Könnecke
committed
import fucoin.wallet.AbstractWallet;
Simon Könnecke
committed
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Enumeration;
public class WalletGuiControlImpl implements WalletGuiControl {
private DefaultListModel<LogMessage> log = new DefaultListModel<>();
private JFrame window = new JFrame("test");
private JPanel topPanel = new JPanel();
private JLabel lblMyAddress = new JLabel("My Address:");
private JTextField txtMyAddress = new JTextField("<MyAddress>");
private JLabel lblEmpty = new JLabel("");
private JLabel lblMyAmount = new JLabel("My FUCs");
private JTextField txtMyAmount = new JTextField("<MyFUCs>");
private JPanel centerPanel = new JPanel();
private JLabel lblSendTo = new JLabel("Send to:");
private JComboBox<String> txtSendTo = new JComboBox<>();
private JLabel lblSendAmount = new JLabel("Amount:");
private JTextField txtSendAmount = new JTextField("");
private JButton btnSend = new JButton("Send");
private JButton btnSearch = new JButton("Search");
private JButton btnStore = new JButton("Store");
private JButton btnExit = new JButton("Exit");
private JPanel bottomPanel = new JPanel();
private JList<LogMessage> txtLog = new JList<>(log);
private JScrollPane logPane = new JScrollPane(txtLog);
private JCheckBox showDebug;
Simon Könnecke
committed
public WalletGuiControlImpl(AbstractWallet wallet) {
window.setSize(400, 600);
window.setLayout(new GridLayout(3, 1));
topPanel.setLayout(new GridLayout(2, 3));
// Row 1
topPanel.add(lblMyAddress);
topPanel.add(txtMyAddress);
topPanel.add(lblEmpty);
// Row 2
topPanel.add(lblMyAmount);
topPanel.add(txtMyAmount);
window.add(topPanel);
//<hr>
centerPanel.setLayout(new GridLayout(4, 1));
// Row 1
JPanel centerup = new JPanel();
centerup.setLayout(new BorderLayout());
centerup.add(lblSendTo, BorderLayout.WEST);
centerup.add(txtSendTo, BorderLayout.CENTER);
centerPanel.add(centerup);
JPanel centerup2 = new JPanel();
centerup2.setLayout(new BorderLayout());
JTextField sendToNewEdt = new JTextField();
centerup2.add(sendToNewEdt, BorderLayout.CENTER);
JButton addNewButton = new JButton("Add");
addNewButton.addActionListener(e -> txtSendTo.addItem(sendToNewEdt.getText()));
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
centerup2.add(addNewButton, BorderLayout.EAST);
centerPanel.add(centerup2);
// Row 2
JPanel centerdown = new JPanel();
centerdown.setLayout(new GridLayout(1, 3));
centerdown.add(lblSendAmount);
centerdown.add(txtSendAmount);
centerdown.add(btnSend);
centerPanel.add(centerdown);
//centerPanel.add(new JLabel(""));
// Row 3
JPanel centerdown2 = new JPanel();
centerdown2.setLayout(new GridLayout(1, 3));
centerdown2.add(btnSearch);
centerdown2.add(btnStore);
centerdown2.add(btnExit);
centerPanel.add(centerdown2);
window.add(centerPanel);
//<hr>
bottomPanel.setLayout(new BorderLayout());
showDebug = new JCheckBox("Show debug messages in transaction log");
showDebug.addItemListener(e -> {
if (e.getStateChange() == ItemEvent.SELECTED) {
txtLog.setModel(log);
} else {
updateFilteredLog();
}
});
bottomPanel.add(showDebug, BorderLayout.NORTH);
bottomPanel.add(logPane, BorderLayout.CENTER);
window.add(bottomPanel);
window.setVisible(true);
Simon Könnecke
committed
btnSend.addActionListener(e -> {
Simon Könnecke
committed
wallet.send(txtSendTo.getSelectedItem().toString(),
Simon Könnecke
committed
Integer.parseInt(txtSendAmount.getText()));
Simon Könnecke
committed
btnStore.addActionListener(e -> {
Simon Könnecke
committed
btnExit.addActionListener(e -> window.dispose());
window.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("window closing");
Simon Könnecke
committed
wallet.leave();
super.windowClosing(e);
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("window closing");
Simon Könnecke
committed
wallet.leave();
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
super.windowClosing(e);
}
});
}
@Override
public void setAddress(String address) {
txtMyAddress.setText(address);
window.setTitle(address);
}
@Override
public void setAmount(int amount) {
txtMyAmount.setText(String.valueOf(amount));
}
@Override
public void addKnownAddress(String address) {
txtSendTo.addItem(address);
}
@Override
public void addLogMsg(String msg) {
log(new LogMessage(msg, false));
}
@Override
public void addTransactionLogMessage(String message) {
log(new LogMessage(message, true));
}
private void log(LogMessage logMessage) {
SwingUtilities.invokeLater(() -> {
log.addElement(logMessage);
if (!showDebug.isSelected()) {
updateFilteredLog();
}
// auto scroll to the bottom
txtLog.ensureIndexIsVisible(log.size() - 1);
});
}
private void updateFilteredLog() {
DefaultListModel<LogMessage> filteredLog = new DefaultListModel<>();
Enumeration<LogMessage> elements = log.elements();
while (elements.hasMoreElements()) {
LogMessage logMessage = elements.nextElement();
if (logMessage.isTransactionRelated()) {
filteredLog.addElement(logMessage);
}
}
txtLog.setModel(filteredLog);
}