java udp jframe,一些Swing组件未显示在JFrame上

I've got a serious problem. When I try to add 2 JRadioButtons and a JLabel on my JFrame, it doesn't work. They are not showing, but other elements do.

The funny thing is, that other components which I added before (also JLabels) are visible on the JFrame.

All swing components are added over a container 'panel' which is the content pane of the JFrame.

I'm using Java DK 7 u67.

Here's the code: (Scroll down to /*This code doesn't work */)

public class UDP_FileTransfer implements KeyListener, Runnable {

JFrame fenster;

Container panel;

JButton startBt, setPathBt;

JTextField portFeld, ipFeld, savePathFeld;

JLabel infoLbl, serverLbl, clientLbl;

JRadioButton server, client;

boolean typeIsServer = true;

int port = 4444;

long size = 0;

boolean serverStarted;

public static void main(String[] args){

new UDP_FileTransfer();

}

public UDP_FileTransfer(){

fenster = new JFrame();

fenster.setLayout(null);

fenster.addKeyListener(this);

fenster.setTitle("UDP File Transfer - Server");

fenster.setLocationRelativeTo(null);

fenster.setResizable(false);

fenster.setSize(400,150);

panel = fenster.getContentPane();

panel.setLayout(null);

panel.addKeyListener(this);

JLabel portLbl = new JLabel("Port: ");

portLbl.setBounds(10,10, 50,20);

panel.add(portLbl);

...

...

...

infoLbl = new JLabel("Status: Starten Sie den Server zuerst!");

infoLbl.setBounds(10, 70, 371,20);

infoLbl.setBorder(new LineBorder(Color.black, 1));

panel.add(infoLbl);

/* This code doesn't work */

JLabel typeLbl = new JLabel("Wählen Sie den Typ aus:");

typeLbl.setBounds(10,125,200,20);

panel.add(typeLbl);

client = new JRadioButton("Client");

client.setBounds(230,125,70,20);

panel.add(client);

client = new JRadioButton("Server");

client.setBounds(320,125,70,20);

panel.add(client);

/* End of non-working code */

fenster.setVisible(true);

fenster.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

The GUI looks like this: Click me

The JRadioButtons client & server and the JLabel typeLbl should appear under the box with the border.

I hope one of you can help me ...

解决方案

Firstly, you should change your latter variable to server.

client = new JRadioButton("Client");

client.setBounds(230,125,70,20);

panel.add(client);

server = new JRadioButton("Server");

server.setBounds(320,125,70,20);

panel.add(server);

and change your frame size

frame.setSize(450, 175);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java UDP广播示例代码,使用Swing创建GUI显示: ```java import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class UDPSender extends JFrame { private static final long serialVersionUID = 1L; private JButton startButton; private JButton stopButton; private JTextArea messageArea; private DatagramSocket socket; private boolean running = false; private Thread broadcastThread; public UDPSender() { setTitle("UDP广播"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 300); setLocationRelativeTo(null); startButton = new JButton("开始广播"); startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { startBroadcast(); } }); stopButton = new JButton("停止广播"); stopButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { stopBroadcast(); } }); messageArea = new JTextArea(); messageArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(messageArea); getContentPane().add(startButton, BorderLayout.NORTH); getContentPane().add(stopButton, BorderLayout.SOUTH); getContentPane().add(scrollPane, BorderLayout.CENTER); } private void startBroadcast() { if (!running) { try { socket = new DatagramSocket(); broadcastThread = new Thread(new Runnable() { public void run() { running = true; while (running) { try { byte[] buffer = "八点有女排比赛,请收听!".getBytes(); DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("255.255.255.255"), 8888); socket.send(packet); messageArea.append("发送广播: " + new String(buffer) + "\n"); Thread.sleep(1000); } catch (IOException | InterruptedException ex) { ex.printStackTrace(); } } socket.close(); } }); broadcastThread.start(); } catch (IOException ex) { ex.printStackTrace(); } } } private void stopBroadcast() { if (running) { running = false; broadcastThread.interrupt(); } } public static void main(String[] args) { UDPSender sender = new UDPSender(); sender.setVisible(true); } } ``` 这个程序使用Java的DatagramSocket类来创建一个UDP套接字,然后在广播线程中发送广播消息。我们将消息发送到所有IP地址为255.255.255.255的主机上的UDP端口8888。这是一种常见的广播地址,它将消息发送到局域网上的所有主机。 在GUI中,我们使用了一个JTextArea来显示发送的消息,并提供了两个按钮以启动和停止广播。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值