#java #swing #actionlistener
Вопрос:
Я пишу программу в NetBeans JFrame
, которая будет использовать одну кнопку для подключения и отключения. Когда клиент нажимает кнопку «Подключиться», ActionListener
он создает соединение с сервером. При подключении текст кнопки меняется с «Подключиться» на «Отключить».
Если клиент снова нажмет на кнопку, соединение необходимо закрыть. Конкретные команды, которые я хочу реализовать, — это pw.close()
, br.close()
, и mySocket.close()
.
Если по какой-либо причине клиент потеряет соединение с сервером, текст кнопки снова изменится на «Подключиться», и при нажатии на кнопку необходимо восстановить соединение. Это то, что у меня есть до сих пор:
private void connectBtnActionPerformed(java.awt.event.ActionEvent evt) {
try {
mySocket = new Socket(serverName.getText(), Integer.parseInt(port.getText())); //connect to server
pw = new PrintWriter( mySocket.getOutputStream(), true ); //initialize printwriter
br = new BufferedReader( new InputStreamReader(mySocket.getInputStream() ) );//initialize buffered reader
output.append("Connected to servern");
}
catch (IOException e)
{output.append("Connection Failedn");
}
if (mySocket.isConnected()){
connectBtn.setText("Disconnect");
Ответ №1:
Используйте JCheckBox
или JToggleButton
с текстом «Подключено».
Проверьте состояние поля / кнопки в прослушивателе действий, чтобы ( if
/ else
) выполнить соответствующее действие.
Ответ №2:
Чтобы заставить вашу кнопку J действовать как переключатель, вы могли бы сделать что-то подобное этому:
// Class member variable.
private static boolean connectedToServer = false;
private void connectBtnActionPerformed(java.awt.event.ActionEvent evt) {
String buttonCaption = connectBtn.getText();
if (buttonCaption.equalsIgnoreCase("connect") amp;amp; !connectedToServer) {
/* A method to connect to server. Returns boolean true
if successful and boolean false if not successful. */
connectedToServer = connectToServer();
if (connectedToServer) {
connectBtn.setText("Disconnect");
connectBtn.setBackground(Color.green);
connectBtn.setForeground(Color.black);
}
}
else if (buttonCaption.equalsIgnoreCase("Disconnect") amp;amp; connectedToServer) {
/* A method to disconnect from server. Returns boolean false
if successful and boolean true if not successful. */
connectedToServer = disconnectFromServer();
if (!connectedToServer) {
connectBtn.setText("Connect");
connectBtn.setBackground(UIManager.getColor("Button.background"));
connectBtn.setForeground(UIManager.getColor("Button.foreground"));
}
}
}