我尝试编程一个客户端 - 服务器聊天,在我的客户端,我得到了一个TextArea用于所有消息。 TextArea已禁用,因此我想知道如何让它看起来“正常”。
我找到了解决方案,如下所示:
.text-input > .scroll-pane:disabled
{
-fx-opacity: 1;
}
但这不起作用,因为我不知道应该写什么,而不是.scroll-pane
这是我的fxml:
这是我目前的代码:
package application;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Optional;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.TextInputDialog;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
public class MainController
{
Socket client;
BufferedReader re;
PrintWriter wr;
String name = "User";
@FXML
private TextField sendTextField;
@FXML
private TextArea messageArea;
@FXML
private Button sendBtn;
public void handleSendButton()
{
sendMessageToServer();
}
public void handelSendKey(KeyEvent event)
{
if (event.getCode() == KeyCode.ENTER)
{
sendMessageToServer();
}
}
public void handelConnectButton()
{
connectToServer();
Thread t = new Thread(new MessagesFromServerListener());
t.start();
}
public void changeName()
{
setName(openNameDialog());
}
private void setName(String name)
{
this.name = name;
}
private String openNameDialog()
{
TextInputDialog dialog = new TextInputDialog();
dialog.setTitle("Change your name");
Optional result = dialog.showAndWait();
String entered = "none.";
if (result.isPresent())
{
entered = result.get();
}
return entered;
}
private String openIPDialog()
{
TextInputDialog dialog = new TextInputDialog();
dialog.setTitle("Type in the Server IP");
Optional result = dialog.showAndWait();
String entered = "none.";
if (result.isPresent())
{
entered = result.get();
}
return entered;
}
public void sendMessageToServer()
{
if (!(sendTextField.getText().isEmpty()) && sendTextField.getText() != null
&& sendTextField.getText().trim().length() > 0)
{
wr.println(name + ": " + sendTextField.getText());
wr.flush();
sendTextField.setText("");
messageArea.requestFocus();
}
}
public boolean connectToServer()
{
try
{
client = new Socket(openIPDialog(), 33377);
re = new BufferedReader(new InputStreamReader(client.getInputStream()));
wr = new PrintWriter(client.getOutputStream());
appendMessage("Network connection established.");
return true;
} catch (Exception e)
{
appendMessage("Could not establish network connection.");
return false;
}
}
private void appendMessage(String string)
{
messageArea.appendText(string + "\n");
}
public class MessagesFromServerListener implements Runnable
{
@Override
public void run()
{
String message;
try
{
while ((message = re.readLine()) != null)
{
appendMessage(message);
}
} catch (IOException e)
{
appendMessage("Nachricht konnte nicht empfangen werden!");
e.printStackTrace();
}
}
}
}