GUI Swing Java中的问题 [英] Problem in GUI Swing Java

查看:57
本文介绍了GUI Swing Java中的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发了一个带有标签窗格的秋千框架.
从该帧中,我移到具有JDeskTop窗格的下一帧.我还创建了Socket和ServerSocket的对象,并将其保持在侦听模式.
我既希望框架可见,又要同时使用两者.

但是每当我执行代码系统时,就会被绞死.
当我删除聆听模式时,它将正确执行.
请帮帮我..

我的代码如下

I have developed a frame in swing containing tabbedpane.
From that frame i move to next frame having JDeskTop Pane. Also i have created object of Socket and ServerSocket and keep it in listening mode.
I want both the frame visible and want to use both.

But whenever i am executing code system is getting hanged.
When i remove listening mode then it executed properly.
please help me..

My code is as follow

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

class TabbedPaneExample	extends	JFrame
{
	private	JTabbedPane tabbedPane;

	public TabbedPaneExample()
	{
		Container c=getContentPane();
		Toolkit toolkit =  Toolkit.getDefaultToolkit ();
		Dimension dim = toolkit.getScreenSize();
		setSize(dim.width,dim.height);
		setTitle("Network Monitoring System");
		setBackground(Color.gray );
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel topPanel = new JPanel();
		topPanel.setLayout( new BorderLayout() );
		c.add(topPanel );
		
		tabbedPane = new JTabbedPane();
		tabbedPane.addTab( "Monitoring", new Monitor());
		topPanel.add( tabbedPane, BorderLayout.CENTER );

	}

	public static void main( String args[] )
	{
		TabbedPaneExample mainFrame	= new TabbedPaneExample();
		mainFrame.setVisible( true );
	}
}


监视器类..


Monitor Class..

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

class Monitor extends JPanel implements ActionListener
{
	JLabel welcome;
	JButton start,stop;
	JComboBox ipCombo;

	Monitor()
	{

		setLayout( null );

		Toolkit toolkit =  Toolkit.getDefaultToolkit ();
		Dimension dim = toolkit.getScreenSize();

		Font f=new Font("Verdana",Font.BOLD,20);

		welcome = new JLabel("Welcome To Remote Monotoring System");
		welcome.setBounds( dim.width/4, 30, 550, 80 );
		welcome.setFont(f);
		add(welcome);

		ipCombo=new JComboBox();
		ipCombo.addItem("192.168.1.16");
		ipCombo.addItem("second");
		ipCombo.addItem("third");
		ipCombo.setBounds(100,100,150,20);
		add(ipCombo);

		start=new JButton("Start");
		start.setBounds(100,140,80,30);
		add(start);
		start.addActionListener(this);

		stop=new JButton("Stop");
		stop.setBounds(250,140,80,30);
		add(stop);
		stop.addActionListener(this);

	}

	public void actionPerformed(ActionEvent ae)
	{
		if(ae.getSource()==start)
		{
			//dispose();
			new AddingInternalFramestoaJDesktopPane();
			System.out.println("Start...");
		}
		else if(ae.getSource()==stop)
			System.out.println("Stop...");
	}
}


将内部框架添加到桌面窗格中...


Adding Internal Frames To Desktop Pane...

import java.awt.BorderLayout;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import java.awt.*;
import javax.swing.*;

public class AddingInternalFramestoaJDesktopPane {
	JFrame frame;
	JDesktopPane desktop;
	public AddingInternalFramestoaJDesktopPane()
	{
		String port = JOptionPane.showInputDialog("Please enter listening port");
		System.out.println(port);
        drawGUI();
        //new ConnectionInitiator(Integer.parseInt(port),desktop);
        initialize(Integer.parseInt(port));
	}
	void drawGUI()
	{
		frame = new JFrame();
		frame.setTitle("DeskTop Frame");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	    desktop = new JDesktopPane();
	    JInternalFrame internalFrame = new JInternalFrame("Can Do All", true, true, true, true);

	    desktop.add(internalFrame);

	    internalFrame.setBounds(25, 25, 200, 100);

	    JLabel label = new JLabel("Mahavir Demo", JLabel.CENTER);
	    internalFrame.add(label, BorderLayout.CENTER);

	    internalFrame.setVisible(true);

	    frame.add(desktop, BorderLayout.CENTER);
		Toolkit toolkit =  Toolkit.getDefaultToolkit ();
		Dimension dim = toolkit.getScreenSize();
		frame.setSize(dim.width,dim.height-30);

	    //frame.setSize(500, 300);
	   frame.setVisible(true);
	}

	public void initialize(int port){
		try {
	            ServerSocket sc = new ServerSocket(port);
	            //Show Server GUI
	            //drawGUI();
	            //Listen to server port and accept clients connections
	            while(true){
	                Socket client = sc.accept();
	                System.out.println("New client Connected to the server");
	                //Per each client create a ClientHandler
	               // new ClientHandler(client,desktop);
	            }
	        } catch (IOException ex) {
	            ex.printStackTrace();
	        }
    }
}

推荐答案

使用JDialog代替JFrame并使用 ^ ]保持在最前面.

其他解决方案:应在框架"出现时调用Window.toFront().可能有停电.
Use JDialog instead of JFrame and use setModalityType(Dialog.ModalityType type) [^] to keep it in front.

Other solution: call Window.toFront() when the Frame should appear. This might have blackouts.


I = Swing的新手B4m,我制作了JComponent的子类.现在,它是一个绘制图像并听鼠标的类.我的问题是:只有当我最小化,最大化或类似的东西时,我的班级才会上漆.我需要从构造函数中调用哪种方法才能正确绘制我的类?谢谢. ---

I=B4m new to Swing and I made a subclass of JComponent. For now its a class that paints a image and listen to the mouse. My problem is: my class gets painted only when I minimize, maximize or something like that. Which method do I need call from constructor to get my class painted correctly? Thanks. ---

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Toolkit; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.beans.PropertyChangeEvent; 
import java.beans.PropertyChangeListener; 
import javax.swing.JComponent


这篇关于GUI Swing Java中的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆