今天测试了一下教材上的代码,发现在Fangting.java中用new调用不同的类有的不能成功
//Fangting.java
import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class Fangting extends JFrame
{
public Fangting()
{
super("方挺的菜单设计");JMenuBar ft=new JMenuBar();setJMenuBar(ft);
JMenu []m={new JMenu("文件(A)"),new JMenu("编辑(B)"),new JMenu("聊天(D)")};
char [][] mc={{'A','B','D'},{'O','S','F'},{'C','V'},{'M','N'}};
JMenuItem [][]my={
{new JMenuItem("打开(O)"),new JMenuItem("保存(S)"), new JMenuItem("退出(F)")},
{new JMenuItem("复制(C)"),new JMenuItem("粘贴(V)")},
{new JMenuItem("开始聊天(M)"),new JMenuItem("停止聊天(N)")}};
int i,j;for(i=0;i<m.length;i++)
{ft.add(m[i]);m[i].setMnemonic(mc[0][i]);for(j=0;j<my[i].length;j++)
{m[i].add(my[i][j]);my[i][j].setMnemonic(mc[i+1][j]);
my[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl"+mc[i+1][j]));
my[i][j].addActionListener( new ActionListener()
{public void actionPerformed(ActionEvent e)
{JMenuItem mytem=(JMenuItem)e.getSource();
System.out.println("运行菜单项:"+mytem.getText());
if(mytem.getText()=="退出(F)")
{new Lal_but( );//new J_ChatClient( );//new MouseDraw( ); };}});}}
m[0].insertSeparator(1);}
public static void main(String args[])
{JFrame app=new Fangting();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(250,120);app.setVisible(true);}}
//MouseDraw.java:
import java.awt.*;import java.awt.event.*;
public class MouseDraw{public static void main(String[] args)
{ MouseFrame frame=new MouseFrame();
frame.addWindowListener(new Wadapt());
frame.setVisible(true);}}
class MouseFrame extends Frame
{ public MouseFrame()
{ setTitle("利用鼠标绘图");setSize(300,300);
MousePanel panel=new MousePanel();add(panel);}}
class MousePanel extends Panel implements MouseListener,MouseMotionListener
{ private int x,y,start_X,start_Y,old_X,old_Y;
private boolean draw;
public MousePanel()
{addMouseListener(this);addMouseMotionListener(this);
public void mousePressed(MouseEvent evt)
{start_X=evt.getX();start_Y=evt.getY();draw=false;}
public void mouseReleased(MouseEvent evt){}
public void mouseClicked(MouseEvent evt){}
public void mouseEntered(MouseEvent evt)
{setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));}
public void mouseExited(MouseEvent evt)
{setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));}
public void mouseDragged(MouseEvent evt)
{x=evt.getX();y=evt.getY();repaint();}
public void mouseMoved(MouseEvent evt){}
public void update(Graphics g)
{paint(g);}
public void paint(Graphics g)
{if(!draw){old_X=x;old_Y=y;draw=true;}
else
{g.setColor(getBackground());g.drawLine(start_X,start_Y,old_X,old_Y);
old_X=x;old_Y=y;}
g.setColor(getForeground());g.drawLine(start_X,start_Y,x,y);}}
class Wadapt extends WindowAdapter
{public void windowClosing(WindowEvent evt)
{Frame frm=(Frame)evt.getSource();frm.setVisible(false);
frm.dispose();System.exit(0);}}//Lal_but.java:
import javax.swing.*;import java.awt.*;import java.awt.event.*;
public class Lal_but extends JFrame {
private JLabel label1,label2;private JButton but1,but2;
public Lal_but(){super("标签和按钮测试窗口");
Container c=getContentPane();
c.setLayout(new FlowLayout(100,100,10));
Icon icon=new ImageIcon("125.gif");
label1=new JLabel("标签中有文字和图像",icon,SwingConstants.CENTER);
label1.setToolTipText("这是标签" );
label1.setHorizontalTextPosition(SwingConstants.CENTER);
label1.setVerticalTextPosition(SwingConstants.BOTTOM );c.add(label1);
Icon icon1=new ImageIcon("");Icon icon2=new ImageIcon("");
Icon icon3=new ImageIcon("");but1=new JButton("按钮1");
c.add(but1); but2=new JButton("按钮2",icon2);
but2.setRolloverIcon(icon3);c.add(but2);
but1.addActionListener(new listener());
but2.addActionListener(new listener());
setSize(360,200 );setVisible(true);}
public static void main(String args[]){
Lal_but app = new Lal_but();app.addWindowListener(
new WindowAdapter(){public void windowClosing(WindowEvent e)
{System.exit( 0 ); }});}
private class listener implements ActionListener{
public void actionPerformed( ActionEvent e ){
JOptionPane.showMessageDialog( null,"You pressed:"+e.getActionCommand());
} }}
//J_ChatClient.java:
import java.awt.*;import java.awt.event.*;
import java.net.Socket;import java.io.*;
import javax.swing.*;
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( );
}} });
c.add( m_enter, BorderLayout.NORTH );
m_display = new JTextArea( );
c.add( new JScrollPane( m_display ), BorderLayout.CENTER );}
public void mb_displayAppend( String s )
{m_display.append( s + "\n" );
m_display.setCaretPosition( m_display.getText( ).length( ) );
m_enter.requestFocusInWindow( );}
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);
}
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
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("发生异常");} }
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);}} 只有Lal_but.java被成功调用。请详细指点。
//Fangting.java
import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class Fangting extends JFrame
{
public Fangting()
{
super("方挺的菜单设计");JMenuBar ft=new JMenuBar();setJMenuBar(ft);
JMenu []m={new JMenu("文件(A)"),new JMenu("编辑(B)"),new JMenu("聊天(D)")};
char [][] mc={{'A','B','D'},{'O','S','F'},{'C','V'},{'M','N'}};
JMenuItem [][]my={
{new JMenuItem("打开(O)"),new JMenuItem("保存(S)"), new JMenuItem("退出(F)")},
{new JMenuItem("复制(C)"),new JMenuItem("粘贴(V)")},
{new JMenuItem("开始聊天(M)"),new JMenuItem("停止聊天(N)")}};
int i,j;for(i=0;i<m.length;i++)
{ft.add(m[i]);m[i].setMnemonic(mc[0][i]);for(j=0;j<my[i].length;j++)
{m[i].add(my[i][j]);my[i][j].setMnemonic(mc[i+1][j]);
my[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl"+mc[i+1][j]));
my[i][j].addActionListener( new ActionListener()
{public void actionPerformed(ActionEvent e)
{JMenuItem mytem=(JMenuItem)e.getSource();
System.out.println("运行菜单项:"+mytem.getText());
if(mytem.getText()=="退出(F)")
{new Lal_but( );//new J_ChatClient( );//new MouseDraw( ); };}});}}
m[0].insertSeparator(1);}
public static void main(String args[])
{JFrame app=new Fangting();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(250,120);app.setVisible(true);}}
//MouseDraw.java:
import java.awt.*;import java.awt.event.*;
public class MouseDraw{public static void main(String[] args)
{ MouseFrame frame=new MouseFrame();
frame.addWindowListener(new Wadapt());
frame.setVisible(true);}}
class MouseFrame extends Frame
{ public MouseFrame()
{ setTitle("利用鼠标绘图");setSize(300,300);
MousePanel panel=new MousePanel();add(panel);}}
class MousePanel extends Panel implements MouseListener,MouseMotionListener
{ private int x,y,start_X,start_Y,old_X,old_Y;
private boolean draw;
public MousePanel()
{addMouseListener(this);addMouseMotionListener(this);
public void mousePressed(MouseEvent evt)
{start_X=evt.getX();start_Y=evt.getY();draw=false;}
public void mouseReleased(MouseEvent evt){}
public void mouseClicked(MouseEvent evt){}
public void mouseEntered(MouseEvent evt)
{setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));}
public void mouseExited(MouseEvent evt)
{setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));}
public void mouseDragged(MouseEvent evt)
{x=evt.getX();y=evt.getY();repaint();}
public void mouseMoved(MouseEvent evt){}
public void update(Graphics g)
{paint(g);}
public void paint(Graphics g)
{if(!draw){old_X=x;old_Y=y;draw=true;}
else
{g.setColor(getBackground());g.drawLine(start_X,start_Y,old_X,old_Y);
old_X=x;old_Y=y;}
g.setColor(getForeground());g.drawLine(start_X,start_Y,x,y);}}
class Wadapt extends WindowAdapter
{public void windowClosing(WindowEvent evt)
{Frame frm=(Frame)evt.getSource();frm.setVisible(false);
frm.dispose();System.exit(0);}}//Lal_but.java:
import javax.swing.*;import java.awt.*;import java.awt.event.*;
public class Lal_but extends JFrame {
private JLabel label1,label2;private JButton but1,but2;
public Lal_but(){super("标签和按钮测试窗口");
Container c=getContentPane();
c.setLayout(new FlowLayout(100,100,10));
Icon icon=new ImageIcon("125.gif");
label1=new JLabel("标签中有文字和图像",icon,SwingConstants.CENTER);
label1.setToolTipText("这是标签" );
label1.setHorizontalTextPosition(SwingConstants.CENTER);
label1.setVerticalTextPosition(SwingConstants.BOTTOM );c.add(label1);
Icon icon1=new ImageIcon("");Icon icon2=new ImageIcon("");
Icon icon3=new ImageIcon("");but1=new JButton("按钮1");
c.add(but1); but2=new JButton("按钮2",icon2);
but2.setRolloverIcon(icon3);c.add(but2);
but1.addActionListener(new listener());
but2.addActionListener(new listener());
setSize(360,200 );setVisible(true);}
public static void main(String args[]){
Lal_but app = new Lal_but();app.addWindowListener(
new WindowAdapter(){public void windowClosing(WindowEvent e)
{System.exit( 0 ); }});}
private class listener implements ActionListener{
public void actionPerformed( ActionEvent e ){
JOptionPane.showMessageDialog( null,"You pressed:"+e.getActionCommand());
} }}
//J_ChatClient.java:
import java.awt.*;import java.awt.event.*;
import java.net.Socket;import java.io.*;
import javax.swing.*;
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( );
}} });
c.add( m_enter, BorderLayout.NORTH );
m_display = new JTextArea( );
c.add( new JScrollPane( m_display ), BorderLayout.CENTER );}
public void mb_displayAppend( String s )
{m_display.append( s + "\n" );
m_display.setCaretPosition( m_display.getText( ).length( ) );
m_enter.requestFocusInWindow( );}
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);
}
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
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("发生异常");} }
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);}} 只有Lal_but.java被成功调用。请详细指点。
太长了没细看..
是你的程序写的有问题,和new没有关系
J_ChatClient,MouseDraw
代码有问题
调试一下吧
你怎么判断它没有成功的?
public Lal_but(){super("标签和按钮测试窗口");
Container c=getContentPane();
c.setLayout(new FlowLayout(100,100,10));
Icon icon=new ImageIcon("125.gif");
label1=new JLabel("标签中有文字和图像",icon,SwingConstants.CENTER);
label1.setToolTipText("这是标签" );
label1.setHorizontalTextPosition(SwingConstants.CENTER);
label1.setVerticalTextPosition(SwingConstants.BOTTOM );c.add(label1);
Icon icon1=new ImageIcon("");Icon icon2=new ImageIcon("");
Icon icon3=new ImageIcon("");but1=new JButton("按钮1");
c.add(but1); but2=new JButton("按钮2",icon2);
but2.setRolloverIcon(icon3);c.add(but2);
but1.addActionListener(new listener());
but2.addActionListener(new listener());
setSize(360,200 );setVisible(true);}
这段代码
因为你的Lal_but 继承了 JFrame,在构造方法中有setVisible(true)方法,所以可以显示出结果,但是你同时要注意到,你只是new Lal_but(),并没有创建对象,也就是没有一个对象来代表你的结果。你再创建一个Lal_but 对象=new Lal_but();来接受该类的实例化,就可以看见结果了