http 控制jframe 显示隐藏(1)

该代码实现了一个Java服务器线程,通过TCP通信处理客户端请求。当接收到特定命令如/show时,它会显示一个JFrame按钮,而/hide则隐藏按钮。程序还处理了错误和资源关闭。

子进程

效果

访问http://localhost:8088/show 显示

访问http://localhost:8088/hide 隐藏

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.JFrame;

/**
 * tcp 方式控制显示
 * 
 */
public class ServerThread3 extends Thread {

    private Socket socket = null;
    private static Logger logger;
    private static PrintStream display;
    private static DataOutputStream out;
    private static DataInputStream in;
    private static Scanner sc;
    JFrame button;

    static {
        logger = Logger.getLogger("Client");
        display = System.out;
        sc = new Scanner(System.in);
    }

    public ServerThread3(Socket socket) {
        this.socket = socket;
    }

    public ServerThread3(Socket socket2, JFrame a) {
        this.socket = socket2;
        this.button = a;
    }

    public void checkCommand(byte lData) {
        switch (lData) {
        case '1':
            button.show();
            break;
        case '0':
            button.hide();
            break;
        case 'q':
//            socket.close();
            break;
        default:
            System.out.println("default break:" + lData);
            break;
        }
    }

    @Override
    public void run() {
        try {
            socket.setSoTimeout(3000);
            InputStream in = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String line = br.readLine();
            System.out.println(line + line + Thread.currentThread().getName());
            String resource = line.substring(line.indexOf('/') + 1, line.lastIndexOf('/') - 5);
            String method = line.substring(0, line.indexOf('/') - 1).toLowerCase();

            // 获得请求的资源的地址
//            resource=URLDecoder.decode(resource, "UTF-8");//反编码 URL 地址
            // 读取客户端发送来的消息
//            while((line = br.readLine())!=null&&(!"".equals(line))) {
////                System.out.println("客户端:" + line+Thread.currentThread().getName());
//            }
            logger.info("readLine end:" + resource);
            if (!"get".equals(method)) {
                logger.info("method:" + method.toLowerCase());
//                return ;
            } else {
                if ("hide".equals(resource)) {
                    button.hide();
                }
                if ("show".equals(resource)) {
                    button.show();
                }
            }
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

            // 创建HTTP响应结果
            // 创建响应协议、状态
            String httpStatus = "HTTP/1.1 200 OK\r\n";
            // 创建响应头
            String responseHeader = "Content-Type:text/html\r\n\r\n";
            bw.write(httpStatus);
            bw.write("Access-Control-Allow-Origin:*\r\n");
            bw.write("Access-Control-Allow-Headers:*\r\n");
            bw.write("Access-Control-Allow-Method:POST,GET,OPTIONS \r\n");
            bw.write(responseHeader);
            bw.write(resource + "ok\n");
            bw.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
//                if(pw!=null)
//                    pw.close();
//                if(os!=null)
//                    os.close();
//                if(br!=null)
//                    br.close();
//                if(isr!=null)
//                    isr.close();
//                if(is!=null)
//                    is.close();
                if (socket != null)
                    socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        super.run();
    }

    void response(String res) {

    }

}
 

`JFrame`中的`ButtonGroup`主要用于管理一组互斥的单选按钮,即用户只能从这组按钮中选择一个。如果你想要通过`ButtonGroup`来关联一些相关的`Label``TextField`,并让它们随着单选按钮的状态改变而隐藏显示,你可以按照以下步骤操作: 1. 创建`JButton`、`JLabel``JTextField`实例,并将它们添加到`JPanel`或`GridBagLayout`等布局容器中。 2. 创建一个`ButtonGroup`并给每个单选按钮添加进去。 ```java ButtonGroup group = new ButtonGroup(); JRadioButton radioButton1 = new JRadioButton("选项1"); JRadioButton radioButton2 = new JRadioButton("选项2"); // 将按钮添加到buttonGroup group.add(radioButton1); group.add(radioButton2); ``` 3. 为`JLabel``JTextField`设置监听器,当单选按钮状态变化时,更新其可见性。可以使用`ActionListener`或`ItemListener`来实现这个功能。 ```java radioButton1.addActionListener(e -> { if (radioButton1.isSelected()) { // 显示相关组件 label1.setVisible(true); textField1.setVisible(true); } else { // 隐藏相关组件 label1.setVisible(false); textField1.setVisible(false); } }); radioButton2.addItemListener(e -> { // 同样的逻辑,判断当前选中的按钮,调整对应组件的可见性 }); ``` 4. 别忘了在创建`JFrame`时将包含所有组件的面板加入到`JFrame`中。 注意,这种方式只适用于简单的场景,如果需要更复杂的交互或动态显示,你可能需要自定义更多的逻辑或者使用模型-视图-控制器(MVC)架构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值