gpt4 book ai didi

java - 面板未显示在 JFrame 中

转载 作者:行者123 更新时间:2023-11-29 10:18:38 25 4
gpt4 key购买 nike

我创建了一个聊天面板并添加到 Jframe,但该面板未显示。但是我在聊天面板中的 sop 正在控制台中显示。任何人请让我知道可能是什么问题

我的相框

public class MyFrame extends JFrame {

MyPanel chatClient;
String input;

public MyFrame() {

input = (String)JOptionPane.showInputDialog(null, "Name:", "Connect to chat
server", JOptionPane.QUESTION_MESSAGE, null,null, "Test");
input=input.trim();
chatClient = new MyPanel("localhost",input);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(chatClient);

}
public static void main(String...args){
new MyFrame();
}
}

我的面板:

public class MyPanel extends JPanel{
ChatClient chatClient;

public MyPanel(String host, String uid) {
chatClient= new ChatClient(host,uid);
add(chatClient.getChatPanel());
this.setVisible(true);
}
}

聊天面板:

public class ChatClient  {

Client client;
String name;
ChatPanel chatPanel;
String hostid;

public ChatClient(String host,String uid){
client = new Client();
client.start();
System.out.println("in constructor");
Network.register(client);

client.addListener(new Listener(){

public void connected(Connection connection){
System.out.println("in client connected method");
Network.RegisterName registerName = new Network.RegisterName();
registerName.name=name;
client.sendTCP(registerName);
}

public void received(Connection connection,Object object){
System.out.println("in client received method");

if (object instanceof Network.UpdateNames) {
Network.UpdateNames updateNames = (Network.UpdateNames)object;
//chatFrame.setNames(updateNames.names);

System.out.println("got it message");
return;
}

if (object instanceof Network.ChatMessage) {
Network.ChatMessage chatMessage = (Network.ChatMessage)object;
//chatFrame.addMessage(chatMessage.text);
System.out.println("send it message");
return;
}

}



}); // end of listner

name=uid.trim();
hostid=host.trim();
chatPanel = new ChatPanel(hostid,name);

chatPanel.setSendListener(new Runnable(){

public void run(){
Network.ChatMessage chatMessage = new Network.ChatMessage();
chatMessage.chatMessage=chatPanel.getSendText();
client.sendTCP(chatMessage);
}
});

new Thread("connect"){
public void run(){
try{
client.connect(5000, hostid,Network.port);
}catch(IOException e){
e.printStackTrace();
}
}
}.start();

}//end of constructor

static public class ChatPanel extends JPanel{

CardLayout cardLayout;
JList messageList,nameList;
JTextField sendText;
JButton sendButton;
JPanel topPanel,bottomPanel,panel;

public ChatPanel(String host,String user){
setSize(600, 200);
this.setVisible(true);
System.out.println("Chat panel "+host+"user: "+user);
{
panel = new JPanel(new BorderLayout());
{
topPanel = new JPanel(new GridLayout(1,2));
panel.add(topPanel);
{
topPanel.add(new JScrollPane(messageList=new JList()));
messageList.setModel(new DefaultListModel());
}
{
topPanel.add(new JScrollPane(nameList=new JList()));
nameList.setModel(new DefaultListModel());
}
DefaultListSelectionModel disableSelections = new DefaultListSelectionModel() {
public void setSelectionInterval (int index0, int index1) {
}
};

messageList.setSelectionModel(disableSelections);
nameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
{
bottomPanel = new JPanel(new GridBagLayout());
panel.add(bottomPanel,BorderLayout.SOUTH);

bottomPanel.add(sendText=new JTextField(),new GridBagConstraints(0,0,1,1,1,0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0));
bottomPanel.add(sendButton=new JButton(),new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.CENTER,0,new Insets(0,0,0,0),0,0));
}

}

sendText.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sendButton.doClick();
}
});

}


public void setSendListener (final Runnable listener) {
sendButton.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent evt) {
if (getSendText().length() == 0) return;
listener.run();
sendText.setText("");
sendText.requestFocus();
}
});
}

public String getSendText () {
return sendText.getText().trim();
}

public void setNames (final String[] names) {
EventQueue.invokeLater(new Runnable(){
public void run(){
DefaultListModel model = (DefaultListModel)nameList.getModel();
model.removeAllElements();
for(String name:names)
model.addElement(name);
}
});

}

public void addMessage (final String message) {
EventQueue.invokeLater(new Runnable() {
public void run () {
DefaultListModel model = (DefaultListModel)messageList.getModel();
model.addElement(message);
messageList.ensureIndexIsVisible(model.size() - 1);
}
});
}

}

public JPanel getChatPanel(){
return chatPanel;
}

}

编辑 1

public class ChatPanel {
ChatP caht;
public ChatPanel1() {
caht=new ChatP();
}
static class ChatP extends JPanel{
JPanel panel;
public ChatP(){
panel = new JPanel();
panel.add(new JLabel("hi from chat panel"));
}
}

public JPanel getChatPanel(){
return caht;
}
}

最佳答案

调用pack()。拼凑的代码仍然存在许多问题和奇怪的方面,但显示..

enter image description here

import java.awt.*;
import javax.swing.*;

public class MyFrame extends JFrame {

MyPanel chatClient;
String input;

public MyFrame() {
chatClient = new MyPanel("localhost","input");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(chatClient);

pack();
// Do last!
setVisible(true);
}
public static void main(String...args){
new MyFrame();
}
}

class MyPanel extends JPanel{

public MyPanel(String host, String uid) {
ChatPanel chatPanel = new ChatPanel();
add(chatPanel.getChatPanel());
}
}

class ChatPanel {
ChatP caht;

public ChatPanel() {
caht=new ChatP();
}

static class ChatP extends JPanel{
public ChatP(){
add(new JLabel("hi from chat panel"));
}
}

public JPanel getChatPanel(){
return caht;
}
}

注意事项

不含电池。该源代码是诊断问题并提出解决方案所需的极简代码。为了尽快获得更好的帮助,请发布 SSCCE .

  • 不要扩展框架或面板,只需保留对每个框架或面板的引用即可。
  • 启动和更新 EDT 上的 GUI。参见 Concurrency in Swing更多细节。

关于java - 面板未显示在 JFrame 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11258986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com