求高手用java SWING实现下图结构
发布网友
发布时间:2022-04-26 21:33
我来回答
共2个回答
热心网友
时间:2023-11-05 10:42
这是服务器端:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.Socket;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
public class J_ChatClient extends JFrame
{
private ObjectInputStream m_input; // 输入流
private ObjectOutputStream m_output; // 输出流
private JTextField m_enter; // 输入区域
private JTextArea m_display; // 显示区域
public J_ChatClient( ) // 在图形界面中添加组件
{
super("聊天程序客户端");
Container c = getContentPane( );
m_enter = new JTextField( );
m_enter.setEnabled( false );
m_enter.addActionListener(new ActionListener( )
{
public void actionPerformed( ActionEvent event )
{ // 向服务器端发送数据
try
{
String s = event.getActionCommand( );
m_output.writeObject( s );
m_output.flush( );
mb_displayAppend( "客户端: " + s );
m_enter.setText( "" ); // 清除输入区域的原有内容
}
catch (Exception e)
{
System.err.println("发生异常:" + e);
e.printStackTrace( );
} // try-catch结构结束
} // 方法actionPerformed结束
} // 实现接口ActionListener的内部类结束
); // addActionListener方法调用结束
c.add( m_enter, BorderLayout.NORTH );
m_display = new JTextArea( );
c.add( new JScrollPane( m_display ), BorderLayout.CENTER );
} // J_ChatClient构造方法结束
public void mb_displayAppend( String s )
{
m_display.append( s + "\n" );
m_display.setCaretPosition( m_display.getText( ).length( ) );
m_enter.requestFocusInWindow( ); // 转移输入焦点到输入区域
} // 方法mb_displayAppend结束
public boolean mb_isEndSession( String m )
{
if (m.equalsIgnoreCase("q"))
return(true);
if (m.equalsIgnoreCase("quit"))
return(true);
if (m.equalsIgnoreCase("exit"))
return(true);
if (m.equalsIgnoreCase("end"))
return(true);
if (m.equalsIgnoreCase("结束"))
return(true);
return(false);
} // 方法mb_isEndSession结束
public void mb_run( String host, int port)
{
try
{
mb_displayAppend("尝试连接");
Socket s = new Socket(host, port);
String m; // 来自服务器端的消息
m_output = new ObjectOutputStream( s.getOutputStream( ) );
m_input = new ObjectInputStream( s.getInputStream( ) );
m_enter.setEnabled( true );
do
{
m = (String) m_input.readObject( );
mb_displayAppend("服务器端: " + m);
} while(!mb_isEndSession( m ));// do-while循环结束
m_output.writeObject("q"); // 通知服务端退出程序
m_output.flush( );
m_output.close( );
m_input.close( );
s.close( );
System.exit( 0 );
}
catch (Exception e)
{
System.err.println("发生异常:" + e);
e.printStackTrace( );
mb_displayAppend("发生异常");
} // try-catch结构结束
} // 方法mb_run结束
public static void main(String args[ ])
{
J_ChatClient app = new J_ChatClient( );
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(350, 150);
app.setVisible(true);
if ( args.length == 0 )
app.mb_run("localhost", 5000);
else app.mb_run(args[0], 5000);
} // 方法main结束
} // 类J_ChatClient结束
这是客户端:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
public class J_ChatServer extends JFrame
{
private ObjectInputStream m_input; // 输入流
private ObjectOutputStream m_output; // 输出流
private JTextField m_enter; // 输入区域
private JTextArea m_display; // 显示区域
private int m_clientNumber = 0; // 连接的客户数
public J_ChatServer( ) // 在图形界面中添加组件
{
super("聊天程序服务器端");
Container c = getContentPane( );
m_enter = new JTextField( );
m_enter.setEnabled( false );
m_enter.addActionListener(new ActionListener( )
{
public void actionPerformed( ActionEvent event )
{ // 向客户端发送数据
try
{
String s = event.getActionCommand( );
m_output.writeObject( s );
m_output.flush( );
mb_displayAppend( "服务器端: " + s );
m_enter.setText( "" ); // 清除输入区域的原有内容
}
catch (Exception e)
{
System.err.println("发生异常:" + e);
e.printStackTrace( );
} // try-catch结构结束
} // 方法actionPerformed结束
} // 实现接口ActionListener的内部类结束
); // addActionListener方法调用结束
c.add( m_enter, BorderLayout.NORTH );
m_display = new JTextArea( );
c.add( new JScrollPane( m_display ), BorderLayout.CENTER );
} // J_ChatServer构造方法结束
public void mb_displayAppend( String s )
{
m_display.append( s + "\n" ); //将给定文本追加到文档结尾
//设置 TextComponent 的文本插入符的位置。注意,插入符可跟踪更改,所以如果组件的基础文本被更改,
//则此位置可能会移动。如果文档为 null,则不执行任何操作。位置必须在 0 和组件的文本长度之间,否则将抛出异常
m_display.setCaretPosition( m_display.getText( ).length( ) );
m_enter.requestFocusInWindow( ); // 转移输入焦点到输入区域
} // 方法mb_displayAppend结束
public boolean mb_isEndSession( String m )
{
if (m.equalsIgnoreCase("q"))
return(true);
if (m.equalsIgnoreCase("quit"))
return(true);
if (m.equalsIgnoreCase("exit"))
return(true);
if (m.equalsIgnoreCase("end"))
return(true);
if (m.equalsIgnoreCase("结束"))
return(true);
return(false);
} // 方法mb_isEndSession结束
public void mb_run( )
{
try
{
ServerSocket server = new ServerSocket(5000);
String m; // 来自客户端的消息
while (true)
{
m_clientNumber++;
mb_displayAppend("等待连接[" + m_clientNumber + "]" + " ");
Socket s = server.accept( );
mb_displayAppend("接收到客户端连接[" + m_clientNumber + "]" + " ");
m_output = new ObjectOutputStream( s.getOutputStream( ) );
m_input = new ObjectInputStream( s.getInputStream( ) );
m_output.writeObject("连接成功");
m_output.flush( );
m_enter.setEnabled( true );
do
{
m = (String) m_input.readObject( );
mb_displayAppend("客户端: " + m);
} while(!mb_isEndSession( m ));// do-while循环结束
m_output.writeObject("q"); // 通知客户端退出程序
m_output.flush( );
m_enter.setEnabled( false );
m_output.close( );
m_input.close( );
s.close( );
mb_displayAppend("连接[" + m_clientNumber + "]结束" + " ");
} // while循环结束
}
catch (Exception e)
{
System.err.println("发生异常:" + e);
e.printStackTrace( );
mb_displayAppend("连接[" + m_clientNumber +"]发生异常" + " ");
} // try-catch结构结束
} // 方法mb_run结束
public static void main(String args[ ])
{
J_ChatServer app = new J_ChatServer( );
app.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
app.setSize(350, 150);
app.setVisible(true);
app.mb_run( );
} // 方法main结束
} // 类J_ChatServer结束
楼主看看就应该懂了,我注释的很详细的,这个是我以前学Socket编程的时候,写的一个例子
追问恩。。不知道你这是不是贴过来的,你这一段代码绝对不是回答我的提问的。大家注意鸟,他这段是一个简单的服务器和客户端的对话框,大家有需要的弄走了。这么多天没人回答,哎,伤心,不过我已经解决了。分就给你了。
热心网友
时间:2023-11-05 10:42
用JList追问求详细代码后追加40分
我想知道如何用java swing设计我想要的这样的一个界面?望抽空帮助...
然后我们可以继承BasicTabbedPaneUI 重写里面的部分绘制方法来修改外观 参考代码 import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.plaf.ComponentUI;import javax.swing.plaf.basic.BasicTabbedPaneUI;public class SwingDemo extends JFrame implements ActionListener {J...
java swing界面设计
import javax.swing.*;import java.awt.*;public class P005_GridLayout {JFrame jframe;public P005_GridLayout() {jframe = new JFrame("表格布局");jframe.setLayout(new GridLayout(3, 4));//表格布局,3行 4列for (int i = 0; i <= 12; i++) {jframe.add(new JButton(i+...
求大佬帮帮忙用java写这样一个界面。
使用Swing或者JavaFX都可以写出来;但是JavaFX是更现代化的界面框架 布局方案1: 绝对布局. 就是精确的控制每一个组件(按钮,文本框,标签等)的位置; 不推荐这种布局,因为这种布局不灵活. 修改起来比较麻烦. 并且不同的平台可能存在差异.布局方案2: 使用各种布局进行嵌套,以JavaFX的布局容器为例, 主题部分...
求一个java程序 基于Swing的图形用户界面设计
import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Enumeration;import java.util.Random;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.UIManager;import javax.swing.plaf.FontUIResource;public clas...
用java swing画出11*19的格子。每个格子的大小是34*38,如何实现?
import javax.swing.JPanel;/ 用java swing画出11*19的格子,每个格子的大小是34*38 author 米强 / public class TestMain extends JFrame { private JPanel pane = null;public TestMain() { super("画格子");paintChequer();getContentPane().add(pane);setDefaultCloseOperation(JFrame.EXIT_...
JAVA swing界面编程,怎么实现点击左边的树节点,然后在右边刷新界面,显 ...
JTree添加一个选择事件的响应器,然后根据事件获取到当前选择的树节点,. 然后读取对应的文字或者图片; 关键代码如下:jt.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { //写入你的逻辑代码 } } 我的阅读器效果如下图(使用的是swing + ...
javaswing界面设计?
javaswing怎样开发出漂亮的界面 使用Swing照样可以开发出漂亮的界面. 主要的解决方案如下: 1:合理的布局,搭建好界面的框架.熟悉常用的布局,并且布局还可以嵌套布局.?可以实现复杂而又美观的界面. 2:适当的图片,?按钮,背景等都可以使用图片,当然了为了节省系统资源,可以使用稍微压缩得比较小的图片. 3:搭配html,swing...
在用Java的Swing开发程序时,我使用了很多个JLabel来铺满整个界面以实现...
其实你不用添加jlabel,直接方jpanel就可以 你可以重写 jpanel里面的 paintComponent()方法 public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D gr = (Graphics2D) g; gr.drawImage(img, x, y, width, height); //x ,y 是坐标 //想显示在上一张图片...
java swing如何编写像eclipse界面模块可拖动
首先这种效果我没有做过,因为现在实在没有人用swing写GUI客户端了。让我现在给你写个完整的代码也么那么多时间》首先分隔成三个窗体,用三个jpanel放到jframe中,然后仔细的设置窗体和jpanel的宽高和位置就能了,至于拖动变成竖的,你只需要在底下console的窗口的jpanel加上MouseListener,具体的可靠下面...
怎样使用java swing画一个表格,把输出显示到表格上,而且每10秒自动刷新...
把table放到一个JFrame里显示 使用线程或者Timer定时更新数据 使用((DefaultTableModel) table.getModel()).fireTableDataChanged();让页面刷新 import java.awt.BorderLayout;import java.util.Timer;import java.util.TimerTask;import java.util.Vector;import javax.swing.JFrame;import javax.swing....