java swing JFrame之间 数据传递

建立了两个JFrame在java swing当中,但是怎样在两个JFrame之间传递数据,比如说JFrame1里面的一个文本框得到的数据传递到JFrame2的一个文本框中并显示出来,怎样才能实现这个功能?

2个回答

写个简单的例子,供你参考吧。
[code="java"]
package test;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class TestJFrame extends JFrame{
private SecondJFrame second = new SecondJFrame();
public TestJFrame() {
this.setLayout(new BorderLayout());

    final JTextField text = new JTextField("first field");
    this.add(text, BorderLayout.CENTER);

    JButton button = new JButton("改变另一个JFrame的值");
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String first = text.getText();
            second.changeTextValue(first);
        }
    });
    this.add(button, BorderLayout.SOUTH);
    this.setSize(300, 100);
    this.setLocation(200, 200);
    this.setVisible(true);

    this.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) 
        {                
            System.exit(0);
        }
    });
}
/**
 * @param args
 */
public static void main(String[] args) {
    new TestJFrame();
}

}

class SecondJFrame extends JFrame {
JTextField text = new JTextField("second field");
public SecondJFrame() {
this.setLayout(new BorderLayout());
this.add(text, BorderLayout.CENTER);
this.setSize(200, 100);
this.setVisible(true);
}

public void changeTextValue(String newValue) {
    text.setText(newValue);
}

}

[/code]

u010381522
若弦之初 代码已发送给你。
大约 7 年之前 回复
Dead_Knight
Dead_Knight 你这个代码根本没用,因为依赖的很多类都不在。要么你直接把代码打包发给我,要么自己参考我这个方式慢慢研究下,自己搞出来
大约 7 年之前 回复
u010381522
若弦之初 能不能帮我写一个内嵌的方法,当点击按扭时实现这个功能,谢谢!
大约 7 年之前 回复

参见:
[url]http://www.iteye.com/problems/94081[/url]
3种解决方法
1.同个new 对象的形式对 B对象的某一个属性复制 而这个值,就是当前页面的查询值
[构造函数传参,在new B的时候,把a中的值,传入到b中,b根据这个值初始化b中原件]
2. b提供一个public 的方法,修改 b中原件的属性的值,给A调用,然后调用b的界面刷新(貌似内置的有 this.updateUI(); )的方法
3.静态字段传值的方式了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求:两个窗口之间的数据互相传递问题--有难度哦

我想实现一个功能:我用swing做了个窗口,上面有个按钮(名为:选择),点击后显示另一个窗口,在新出来的窗口里,我想连接到数据库查询一些数据,然后把查询到的结果返回到第一个窗口,不知道怎么实现。请求哪位大侠给予帮助!

java窗体之间怎么传值

java窗体之间怎么传值,在房山窗口点击添加,然后在另一个表格窗口中显示,有没有比较简单的方法,该怎么做,求指点,谢谢~

使用swing实现学生选课信息界面

使用swing实现学生选课信息界面: 1.界面采用网格布局,一行显示一项内容,支持右边滚动条拖动。 2.内容包括:(1)学生的姓名与学号:用文本框输入。(2)学生的性别:男女二选一。(3)学生的年级:范围从2000年到2015年,选择一个。 (4)学生的专业:计算机科学与技术、通信技术、信息管理、软件工程、网络工程,选择一个。(5)选择的课程:程序设计基础、数据库原理、数据结构与算法、专业英语、操作系统、 路由与交换技术、数字逻辑、高等数学,可以选择多个。 3.内容下面有一个提交按钮,点击后在界面下方用文字显示选好的内容。 4.右键点击界面任何地方可以弹出菜单,包含重置和关闭两个选项,选中后进行相应操作。 5.无需后台处理,只实现界面功能即可

Java两个类之间传值问题(初学)

# 背景简介 我在试着做飞机大战,想用jlabel做一个得分显示。 整个界面用JFrame搭建,两个jpanel,一号Jpanel用paint()画游戏界面,二号Jpanel用来放置jlabel,即用来显示分数。【我方飞机】、【敌机】、【子弹】、【爆炸效果】、【开始】、【画布】共六个类,paint()就在【画布】中,前四个类只有属性器和方法,【画布】里创建我方飞机、敌机和子弹的对象和其移动方法。 # 这里是正题 1. 【爆炸效果】里存在让碰撞后的子弹和敌机消失的方法,在此中需要调用Score值,增加分数。 2. 【画布】里的paint()联合repaint()会重复画图,调用【爆炸效果】(每次都是new Bomb(4个参数))。 3. 【开始】包含main入口,继承jframe,构造方法里做好基本局部,jpanel和jlabel就是在这里加的。 4.我在【画布】里另创一类GetScore继承jlabel,初始化int Score=0,属性器getter和setter完全正常,打印输出显示分数累加正常。传值到【开始】的一个方法start(int a)中,该方法打印输出同样显示分数值正常。但实际效果却是jlabel一直显示得分: 0. # 求教 如何能让jlabel变动,详略均可,谢谢! ``` import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JPanel; public class Start extends JFrame{ //这是画布类 Interface in = new Interface(); JPanel jp = new JPanel(); //得分方法类的实例 GetScore jl = new GetScore(); public String getJl() { return jl.getText(); } public void setJl(String str) { jl.setText(str); } Start(){ setTitle("飞机大战"); setSize(700, 800); setBounds(0, 0, 600, 800); setResizable(false); setVisible(true); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new BorderLayout()); //将显示分数的jlabel添加到面板中 jp.add(jl); new Thread(in).start(); this.add(in,BorderLayout.CENTER); jp.setSize(100, 700); this.add(jp,BorderLayout.WEST); this.addKeyListener(in); } Start(int a){ setJl("得分: "+a); System.out.println("jl:"+jl.getText()); } public static void main(String[] args) { new Start(); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201607/04/1467644109_45110.png)

Java从数据库多个表中获取信息,添加到JComboBox中要怎么做?

java中一个功能,需要在多个选修课表中,根据学号获取各个选修课表中本学号所选的科目,并添加到JComboBox中。形成一个下拉列表,要怎么做?

Java中如何将下拉菜单中的字符串数据提取出来运用到文本框的数字运算显示中?

![图片说明](https://img-ask.csdn.net/upload/201704/29/1493469364_574330.png) /*上部的功能已经实现了,但是下面除了那个复选框,下拉菜单的值我还是没办法运用到文本框中,ActionEvent只能将字符串直接传给文本框,不能提取实现数字运算,而且方法也不支持return返回值,抛异常我也尝试过,但是接口的的实现上又出了毛病,实在没辙了,求问解决办法,感激不尽 */ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.*; import java.text.ParseException; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JFormattedTextField; import javax.swing.JFrame; import javax.swing.JPanel; class layout extends JFrame implements ActionListener { int propor; String help; private JPanel mb1,mb2,mb3; JLabel bq1,bq2,bq3,bq3_5,bq4,bq5,bq6; private JFormattedTextField rmb; private JFormattedTextField coupon; private JFormattedTextField gold; private JFormattedTextField gold_2; private JFormattedTextField exp; private JComboBox pro; JCheckBox link; public layout() { super("坦克世界计算器"); mb1 = new JPanel(); mb2 = new JPanel(); rmb= new JFormattedTextField(new java.text.DecimalFormat("#0")); coupon= new JFormattedTextField(new java.text.DecimalFormat("#0")); gold= new JFormattedTextField(new java.text.DecimalFormat("#0")); gold_2= new JFormattedTextField(new java.text.DecimalFormat("#0")); exp= new JFormattedTextField(new java.text.DecimalFormat("#0")); rmb.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0")))); coupon.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0")))); gold.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0")))); gold_2.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0")))); exp.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0")))); rmb.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { String old = rmb.getText(); JFormattedTextField.AbstractFormatter formatter = rmb.getFormatter(); if (!old.equals("")) { if (formatter != null) { String str = rmb.getText(); try { long page = (Long) formatter.stringToValue(str); coupon.setText(20*page + ""); gold.setText(40*page + ""); } catch (ParseException pe) { rmb.setText("0"); } } } } }); coupon.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { String old = coupon.getText(); JFormattedTextField.AbstractFormatter formatter = coupon.getFormatter(); if (!old.equals("")) { if (formatter != null) { String str = coupon.getText(); try { long page = (Long) formatter.stringToValue(str); rmb.setText(page/20 + ""); gold.setText(page/20 + ""); } catch (ParseException pe) { coupon.setText("0"); } } } } }); gold.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { String old = gold.getText(); JFormattedTextField.AbstractFormatter formatter = gold.getFormatter(); if (!old.equals("")) { if (formatter != null) { String str = gold.getText(); try { long page = (Long) formatter.stringToValue(str); rmb.setText(page/40 + ""); coupon.setText(page/20 + ""); } catch (ParseException pe) { gold.setText("0"); } } } } }); gold_2.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { String old = gold_2.getText(); JFormattedTextField.AbstractFormatter formatter = gold_2.getFormatter(); if (!old.equals("")) { if (formatter != null) { String str = gold_2.getText(); try { long page = (Long) formatter.stringToValue(str); exp.setText(page*propor + ""); } catch (ParseException pe) { gold_2.setText("0"); } } } } }); exp.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { String old = exp.getText(); JFormattedTextField.AbstractFormatter formatter = exp.getFormatter(); if (!old.equals("")) { if (formatter != null) { String str = exp.getText(); try { long page = (Long) formatter.stringToValue(str); gold_2.setText(page/propor + ""); } catch (ParseException pe) { exp.setText("0"); } } } } }); bq1=new JLabel("人民币",SwingConstants.CENTER); bq2=new JLabel("点券",SwingConstants.CENTER); bq3=new JLabel("金币",SwingConstants.CENTER); bq3_5=new JLabel(" "); bq4=new JLabel("金币",SwingConstants.CENTER); bq5=new JLabel("兑换比例",SwingConstants.CENTER); bq6=new JLabel("经验",SwingConstants.CENTER); pro= new JComboBox(); pro.setModel(new DefaultComboBoxModel(new String[] { "1:40", "1:35", "1:25"})); pro.setActionCommand("1");//设置动作命令 pro.addActionListener(this);//设置事件响应器 link=new JCheckBox("是否链接"); mb1.setLayout(new GridLayout(2,3,60,0)); mb2.setLayout(new GridLayout(2,4,10,0)); mb1.add(bq1); mb1.add(bq2); mb1.add(bq3); mb1.add(rmb); mb1.add(coupon); mb1.add(gold); mb2.add(bq3_5);mb2.add(bq4); mb2.add(bq5); mb2.add(bq6); mb2.add(link); mb2.add(gold_2); mb2.add(pro); mb2.add(exp); this.setLayout(new GridLayout(2,1)); this.add(mb1); this.add(mb2); this.setBounds(300, 280, 400, 200);//相当于setLocation+setSize this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e){//当鼠标选择下拉菜单的值时 String comd =e.getActionCommand();//得到动作命令 if(comd.equals("1")){ help=((String) pro.getSelectedItem());//设置文本框的内容 } } } public class calculator { public static void main(String[] args) { new layout().setVisible(true); } } /*一般来说不可以,可以考虑用异常来达到目的,如: class MyException extends Exception { public MyException(String message) { super(message); } } class MyClass { public void doSomething()throws MyException { //do something String mystr="mystr" throw new MyException(mystr); } }*/

JAVA 如何用实现table内容向另一table内容的复制。求大神们帮忙解决!

![图片说明](https://img-ask.csdn.net/upload/201611/13/1479012644_579833.png) 就是实现点击→实现内容的传递。点击←删除该行。 但是我实现时却出现了这样的问题。。简单的示例![图片说明](https://img-ask.csdn.net/upload/201611/13/1479012799_283586.png)![图片说明](https://img-ask.csdn.net/upload/201611/13/1479012807_630360.png)![图片说明](https://img-ask.csdn.net/upload/201611/13/1479012815_549808.png) 简单的点击添加值之后,会将之前的全部替换。一头雾水- -。。求大神讲解 简单源码如下。 package com.test; import java.awt.BorderLayout; import java.awt.EventQueue; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import javax.swing.JTable; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Jtable extends JFrame { private JPanel contentPane; private JTable table; private JButton btnNewButton; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Jtable frame = new Jtable(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Jtable() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new BorderLayout(0, 0)); JScrollPane scrollPane = new JScrollPane(table); contentPane.add(scrollPane); Vector columnNames = new Vector(); for(int i=0;i<4;i++){ columnNames.add("第" +(i+1) + "列"); } Vector rowData = new Vector(); Vector data = new Vector(); //开始表中的数据是1,2,3,4 rowData.add("1"); rowData.add("2"); rowData.add("3"); rowData.add("4"); data.add(rowData); //使用DefaultTableModel构建表格 DefaultTableModel tableModel = new DefaultTableModel(data,columnNames); table = new JTable(tableModel); scrollPane.setViewportView(table); btnNewButton = new JButton("New button"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { rowData.add("4"); rowData.add("5"); rowData.add("6"); rowData.add("7"); data.add(rowData); tableModel.setDataVector(data, columnNames); table.setModel(tableModel); } }); scrollPane.setRowHeaderView(btnNewButton); } }

空指针异常java,想做个画图板,

``` package control; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import javax.swing.JButton; import elements.Circle; import elements.Elements; import elements.Line; import elements.Rectangle; public class Control implements ActionListener, MouseListener, MouseMotionListener { Graphics g; public String doit = ""; public int x1, y1, x2, y2; //鼠标的按下和释放时的坐标 // private Color curColor;//当前画笔颜色 ArrayList <Elements> drawX = new ArrayList <Elements>(); public ArrayList<Elements> getDrawX() { return drawX; } public void setDrawX(ArrayList<Elements> drawX) { this.drawX = drawX; } public void setG(Graphics g) { this.g= g; }//传递画笔 @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals("")) { Color newcolor = new Color((int) e.getSource()); g.setColor(newcolor); } else { doit = e.getActionCommand(); JButton buttonblack = new JButton(); buttonblack.setBackground(java.awt.Color.black); Color coloruse = buttonblack.getBackground(); g.setColor(coloruse); } } @Override public void mouseMoved(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { System.out.println("2");// 鼠标点下 点x1,y1 x1 = e.getX(); y1 = e.getY(); } @Override public void mouseReleased(MouseEvent e) { x2=e.getX(); y2=e.getY(); } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { System.out.println("3"); if ( doit.equals("circle")) { drawX.add(new Circle(x1, y1, x2, y2)); } if ( doit.equals("rectangle")) { drawX.add(new Rectangle(x1, y1, x2, y2)); } if ( doit.equals("line")) { drawX.add(new Line(x1, y1, x2, y2)); } } } ============================= package view; import java.awt.*; import javax.swing.*; import control.Control; import java.awt.event.*; public class Gui extends JFrame { public Control drawit; private static final long serialVersionUID = 1L; public Gui() { JFrame frame = new JFrame("miniCAD"); JPanel panelBig = new JPanel();//画板 JPanel panelSmall = new JPanel();//图形和颜色板 JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panelBig, panelSmall); panelBig.setBackground(Color.white); panelSmall.setBackground(Color.white); pane.setRightComponent(panelSmall); pane.setLeftComponent(panelBig); pane.setContinuousLayout(true); pane.setOneTouchExpandable(true); // Container C = frame.getContentPane(); // C.add(pane); frame.add(pane); //添加图形 JButton buttoncircle = new JButton("circle"); JButton buttonline = new JButton("line"); JButton buttonrectangle = new JButton("rectangle"); JButton buttontext = new JButton("text"); JButton buttontriangle = new JButton("triangle"); frame.setVisible(true); panelSmall.setLayout(new GridLayout(6,1,0,0)); panelSmall.add(buttoncircle); panelSmall.add(buttonline); panelSmall.add(buttonrectangle); panelSmall.add(buttontext); panelSmall.add(buttontriangle); //监听使用哪个图形 control.Control monitor = new control.Control(); buttoncircle.addActionListener(monitor); buttonline.addActionListener(monitor); buttonrectangle.addActionListener(monitor); buttontext.addActionListener(monitor); buttontriangle.addActionListener(monitor); //添加颜色板 JPanel colorpane = new JPanel(); panelSmall.add(colorpane); colorpane.setLayout(new GridLayout(3,3)); JButton buttonred = new JButton(); buttonred.setBackground(Color.red); colorpane.add(buttonred); JButton buttonblack = new JButton(); buttonblack.setBackground(Color.black); colorpane.add(buttonblack); JButton buttonblue = new JButton(); buttonblue.setBackground(Color.blue); buttonblue.setContentAreaFilled(false); colorpane.add(buttonblue); JButton buttongreen = new JButton(); buttongreen.setBackground(Color.green); colorpane.add(buttongreen); JButton buttongray = new JButton(); buttongray.setBackground(Color.gray); colorpane.add(buttongray); JButton buttonwhite = new JButton(); buttonwhite.setBackground(Color.white); colorpane.add(buttonwhite); JButton buttonyellow = new JButton(); buttonyellow.setBackground(Color.yellow); colorpane.add(buttonyellow); JButton buttonpink = new JButton(); buttonpink.setBackground(Color.pink); colorpane.add(buttonpink); JButton buttonorange = new JButton(); buttonorange.setBackground(Color.orange); colorpane.add(buttonorange); frame.setVisible(true); //添加颜色监听器 control.Control color = new control.Control(); buttonred.addActionListener(color); buttonblack.addActionListener(color); buttonblue.addActionListener(color); buttongreen.addActionListener(color); buttongray.addActionListener(color); buttonwhite.addActionListener(color); buttonyellow.addActionListener(color); buttonpink.addActionListener(color); buttonorange.addActionListener(color); control.Control drawit = new control.Control(); panelBig.addMouseListener(drawit); panelBig.addMouseMotionListener(drawit); drawit.setG(panelBig.getGraphics()); } public static void main(String[] args) { Gui pic = new Gui(); } } 在control类里 g.setColor(coloruse);这句报错,查了下资料,我想可能是Graphics g问题或者是JPanel问题,不知道怎么改 ``` 每次点击按钮,报错空指针异常

java中如何调用另一个类中的变量

package newpackage; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import javafx.scene.chart.PieChart.Data; import javax.swing.JFrame; import javax.swing.JPanel; //窗体类 public class MyFrame extends JFrame { /** * @param args */ JPanel jPanel; char charA; public MyFrame(){ this.setSize(500,100); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("Keylogger"); this.setVisible(true); this.addKeyListener(new MyKeyListener()); jPanel = new JPanel(); add(jPanel); } public static void main(String[] args) { // TODO Auto-generated method stub new MyFrame(); } } class MyKeyListener extends KeyAdapter{ public void keyPressed(KeyEvent e){ char charA = e.getKeyChar(); String s = null; try { s = "You pressed "+charA+" at "+getTime(); } catch (ParseException ex) { Logger.getLogger(MyKeyListener.class.getName()).log(Level.SEVERE, null, ex); } System.out.println(s); } private Date getTime() throws ParseException { Date d = new Date(); String s = null; s = DateFormat.getDateInstance().format(d); s = DateFormat.getDateInstance(DateFormat.DEFAULT).format(d); s = DateFormat.getDateInstance(DateFormat.FULL).format(d); s = DateFormat.getDateInstance(DateFormat.MEDIUM).format(d); s = DateFormat.getDateInstance(DateFormat.SHORT).format(d); DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); s = sdf.format(d); DateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); s = sdf2.format(d); DateFormat sdf3 = new SimpleDateFormat("yyyyMMddHHmmss"); s = sdf3.format(d); s = sdf.format(d); Date today = sdf.parse(s); Calendar c = Calendar.getInstance(); return c.getTime(); } } 如果想新建一个类来调用 class MyKeyListener extends KeyAdapter{ public void keyPressed(KeyEvent e){ char charA = e.getKeyChar(); String s = null; try { s = "You pressed "+charA+" at "+getTime(); } catch (ParseException ex) { Logger.getLogger(MyKeyListener.class.getName()).log(Level.SEVERE, null, ex); } System.out.println(s); } 这里的s,但是不知道该怎么编写 下面是我新建的类: package newpackage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; public class FileWriter { public static void main(String[] args) throws IOException { FileOutputStream f = new FileOutputStream(new File("D:\\temp\\text.txt")); PrintStream p = new PrintStream(f); MyKeyListener m = new MyKeyListener(); p.println(s); p.close(); } 希望各位大神能给我一些帮助,感激不尽

想做一个类似画图板的.java,当点击circle,可以在panel画一个圆,现在遇到两个问题

用mvc设计模式,将elements为父类,圆,直线等作为其子类,各自有不同的draw()的方法; control是响应鼠标及按钮监听事件的类; Gui是界面,可以点击按钮,点击panel一点,拖动,另一点释放,实现作图 代码如下:以画直线和画矩形为例: 在panel做出的图形无法显示,不知道该怎么实现,新建一个mypic类,让它继承JPanel,但是没有出现@over 在line里设置了输出"你画了一条直线",为了检测是否实现mouse event. 点第一次“line", 出现"你画了一条直线"; 再点一次rectangle,会先出现"你画了一条直线"并且出现"你画了个矩形" 如果再点一次rectangle,会出现"你画了一条直线""你画了个矩形""你画了个矩形" 每一次都会重复再做一次,之前所有按钮监听的事件~ ``` package elements; import java.awt.Graphics; public class Line extends Elements { public int x1; public int y1; public int x2; public int y2; Graphics g; public Line(int x1, int y1, int x2, int y2) { super(x1, y1, x2, y2); this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; } @Override public void draw(Graphics g) { System.out.print("你画了一条直线"); g.drawLine( x1, x2, y1, y2); } } ``` ``` package control; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JPanel; import elements.Elements; import elements.Line; import elements.Rectangle; public class Control extends JPanel implements ActionListener, MouseListener, MouseMotionListener { private static final long serialVersionUID = 1L; public Graphics g; public JButton curcolor; public Color color; public void getGraphics(Graphics g) { this.g = g; } public void setG(Graphics g) { this.g= g; }//传递画笔 public void setcurcolor(JButton curcolor) { this.curcolor = curcolor; } public void setcolor(Color color) { this.color = color; } public String doit = ""; public int x1, y1, x2, y2; //鼠标的按下和释放时的坐标 ArrayList <Elements> drawX = new ArrayList <Elements>(); public void add(Elements picture) { drawX.add(picture); } public ArrayList<Elements> getDrawX() { return drawX; } public void setDrawX(ArrayList<Elements> drawX) { this.drawX = drawX; } @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("")) { JButton jb = (JButton) e.getSource(); color = jb.getBackground(); // System.out.println("red"); } else { doit = e.getActionCommand(); } } @Override public void mouseMoved(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { x1 = e.getX(); y1 = e.getY(); g.setColor(color); } @Override public void mouseReleased(MouseEvent e) { x2=e.getX(); y2=e.getY(); if ( doit.equals("rectangle")) { drawX.add(new Rectangle(x1, y1, x2, y2)); // doit = ""; } if ( doit.equals("line")) { drawX.add(new Line(x1, y1, x2, y2)); // doit = ""; } for (Elements sth : drawX) { sth.draw(g); } } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { } } ``` ``` package elements; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public abstract class Elements extends JPanel { private static final long serialVersionUID = 1L; public Elements(int x1, int y1, int x2, int y2) { // TODO Auto-generated constructor stub } public void draw(Graphics g) { } } ``` package view; import java.awt.*; import javax.swing.*; import control.Control; import elements.Elements; import java.awt.event.*; import java.util.ArrayList; public class Gui extends JFrame { public Control drawit; Graphics g; private static final long serialVersionUID = 1L; public Gui() { JFrame frame = new JFrame("miniCAD"); JPanel panelBig = new JPanel();//画板 JPanel panelSmall = new JPanel();//图形和颜色板 JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panelBig, panelSmall); panelBig.setBackground(Color.white); panelSmall.setBackground(Color.gray); pane.setRightComponent(panelSmall); pane.setLeftComponent(panelBig); pane.setContinuousLayout(true); pane.setOneTouchExpandable(true); frame.add(pane); // Container C = frame.getContentPane(); // C.add(pane); //添加图形 JButton buttoncircle = new JButton("circle"); JButton buttonline = new JButton("line"); JButton buttonrectangle = new JButton("rectangle"); JButton buttontext = new JButton("text"); JButton buttontriangle = new JButton("triangle"); frame.setVisible(true); panelSmall.setLayout(new GridLayout(6,1,0,0)); panelSmall.add(buttoncircle); panelSmall.add(buttonline); panelSmall.add(buttonrectangle); panelSmall.add(buttontext); panelSmall.add(buttontriangle); //添加颜色板 JPanel colorpane = new JPanel(); panelSmall.add(colorpane); colorpane.setLayout(new GridLayout(3,3)); JButton buttonred = new JButton(); buttonred.setBackground(Color.red); colorpane.add(buttonred); JButton buttonblack = new JButton(); buttonblack.setBackground(Color.black); colorpane.add(buttonblack); JButton buttonblue = new JButton(); buttonblue.setBackground(Color.blue); buttonblue.setContentAreaFilled(false); colorpane.add(buttonblue); JButton buttongreen = new JButton(); buttongreen.setBackground(Color.green); colorpane.add(buttongreen); JButton buttongray = new JButton(); buttongray.setBackground(Color.gray); colorpane.add(buttongray); JButton buttonwhite = new JButton(); buttonwhite.setBackground(Color.white); colorpane.add(buttonwhite); JButton buttonyellow = new JButton(); buttonyellow.setBackground(Color.yellow); colorpane.add(buttonyellow); JButton buttonpink = new JButton(); buttonpink.setBackground(Color.pink); colorpane.add(buttonpink); JButton buttonorange = new JButton(); buttonorange.setBackground(Color.orange); colorpane.add(buttonorange); //监听使用哪个图形 control.Control monitor = new control.Control(); //添加颜色监听器 // control.Control color = new control.Control(); buttonred.addActionListener(monitor); buttonblack.addActionListener(monitor); buttonblue.addActionListener(monitor); buttongreen.addActionListener(monitor); buttongray.addActionListener(monitor); buttonwhite.addActionListener(monitor); buttonyellow.addActionListener(monitor); buttonpink.addActionListener(monitor); buttonorange.addActionListener(monitor); buttoncircle.addActionListener(monitor); buttonline.addActionListener(monitor); buttonrectangle.addActionListener(monitor); buttontext.addActionListener(monitor); buttontriangle.addActionListener(monitor); panelBig.addMouseListener(monitor); panelBig.addMouseMotionListener(monitor); monitor.setG(panelBig.getGraphics()); monitor.getDrawX(); frame.setVisible(true); } public static void main(String[] args) { Gui pic = new Gui(); } } ```

java 里面,创建一个新线程的时候,为什么要传入一个runnable的参数呢?下面有代码

import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class Ball extends JPanel implements Runnable { /** * */ JFrame frame ; int x = 30 ; private static final long serialVersionUID = 1L ; public Ball () { frame = new JFrame () ; frame.add(this) ; frame.setSize(500,500) ; frame.setVisible(true) ; } public void paintComponent(Graphics g) { super.paintComponents(g) ; g.setColor(new Color (238,238,238)) ; g.fillOval(x-3,30,100,100) ; g.setColor(Color.RED) ; g.fillOval(x,30,100,100) ; } @Override public void run() { while(true) { this.x = this.x + 3 ; try { Thread.sleep(70) ; repaint () ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main (String [] args) { Thread th = new Thread (new Ball ()) ; th.start() ; } } 只要添加包名就可以运行了。我想问的是 Thread th = new Thread (new Ball ()) ; 为什么要new一个ball然后传入Thread里面呢? 为什么要这样做呢?为了可以使用run方法吗?

JAVA通讯录 TXT文档分页问题

我在做一个JAVA通讯录,想请问一下如何把这个TXT文档 超过20行分页显示,请前辈们多多指教,谢谢 方便的话请帮我写一下代码看看行吗 package MyAddBook; import java.awt.Choice;//选择 import java.awt.Container;//容器 import java.awt.Frame; import java.awt.GridLayout;//间距 import java.awt.Toolkit;//居中 import java.awt.event.ActionEvent;//事件 import java.awt.event.ActionListener;//监听 import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter;//文本输出流打印对象的格式化 import java.text.Collator;//区分语言 import java.util.Arrays; import java.util.Comparator;//排序 import java.util.Scanner; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane;//消息提示框 import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MyAddBook { public static JFrame frame; public MyAddBook() { frame=new JFrame("通讯录");//面板标题 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击关闭按钮关闭窗口 frame.setVisible(true);//窗口可见 /* * 在一个窗口中,我们经常需要给窗口添加菜单条。在 Java * 中这一部分是由三个类实现的,它们是JMenuBar、JMenu和JMenuItem, 分别对应菜单条、菜单和菜单项。 * 同时,可以给JMenuItem注册侦听器,但不能对JMenuBar,JMenu注册侦听器. * * 一、菜单条(JMenuBar) * JMenuBar 的构造方法是 JMenuBar(),相当简单。在构造之后,还要将它设置成窗口的菜单条,这里要用 setJMenuBar * 方法: JMenuBar TestJMenuBar=new JMenuBar(); * TestFrame.setJMenuBar(TestJMenuBar); 需要说明的是,JMenuBar 类根据 JMenu * 添加的顺序从左到右显示,并建立整数索引。 * * 二、菜单(JMenu) 在添加完菜单条后,并不会显示任何菜单,所以还需要在菜单条中添加菜单。菜单 * JMenu 类的构造方法有4种: JMenu() 构造一个空菜单。 JMenu(Action a) * 构造一个菜单,菜单属性由相应的动作来提供。 JMenu(String s) 用给定的标志构造一个菜单。 JMenu(String * s,Boolean b) 用给定的标志构造一个菜单。如果布尔值为false,那么当释放鼠标按钮后,菜单项会消失;如果布尔值为true, * 那么当释放鼠标按钮后,菜单项仍将显示。这时的菜单称为 tearOff 菜单。 在构造完后,使用 JMenuBar 类的 add * 方法添加到菜单条中。 * * 三、菜单项(JmenuItem) 接下来的工作是往菜单中添加内容。 * 在菜单中可以添加不同的内容,可以是菜单项(JMenuItem),可以是一个子菜单,也可以是分隔符。 在构造完后,使用 JMenu 类的 * add 方法添加到菜单中。 子菜单的添加是直接将一个子菜单添加到母菜单中,而分隔符的添加只需要将分隔符作为菜单项添加到菜单中。 */ JMenuBar bar=new JMenuBar(); JMenu edit=new JMenu("编辑"); JMenuItem edit1=new JMenuItem("录入"); JMenuItem edit2=new JMenuItem("查询"); JMenuItem edit3=new JMenuItem("删除"); JMenuItem edit4=new JMenuItem("修改"); JMenuItem edit5=new JMenuItem("排序"); edit1.addActionListener(new Type());//监听 JMenu show=new JMenu("按性别显示"); JMenuItem show1=new JMenuItem("男"); JMenuItem show2=new JMenuItem("女"); Container c=frame.getContentPane(); JPanel p=new JPanel(); c.add(p); p.add(bar); bar.add(edit); bar.add(show); edit.add(edit1); edit.add(edit2); edit.add(edit3); edit.add(edit4); edit.add(edit5); show.add(show1); show.add(show2); // 获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; // 然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); frame.setSize(500, 300); /* * 1. JFrame是javax.swing.JFrame的类,Frame是Java.awt.Frame的类 * * 2. 关闭窗口的方式不同: * 2.1 JFrame的关闭方式:传递参数使得关闭按钮有效 * Frame的关闭方式:加监听使得关闭按钮有效 */ edit2.addActionListener(new ActionListener() // 监听查询 { public void actionPerformed(ActionEvent e) { new Operation("查询", 2).dialog.setVisible(true); } }); edit3.addActionListener(new ActionListener() // 监听删除 { public void actionPerformed(ActionEvent e) { //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); new Operation("删除", 3).dialog.setVisible(true); } }); edit4.addActionListener(new ActionListener() // 监听修改 { public void actionPerformed(ActionEvent e) { new Operation("修改", 4).dialog.setVisible(true); } }); // 输出类 edit5.addActionListener(new ActionListener() // 监听排序 { public void actionPerformed(ActionEvent e) { new Print("按姓名排序后", 2);//调用 排序 函数 } }); show1.addActionListener(new ActionListener() // 监听男 { public void actionPerformed(ActionEvent e) { new Print("男", 1);//调用 匹配 显示 } }); show2.addActionListener(new ActionListener() // 监听女 { public void actionPerformed(ActionEvent e) { new Print("女", 1);//调用 匹配 显示 } }); } public static void main(String[] args) { new MyAddBook(); } public String[] getSortOfChinese(String[] a) { // Collator 类是用来执行区分语言环境,这里使用CHINA Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); // JDKz自带对数组进行排序。 Arrays.sort(a, cmp); return a; } } class Operation{ private Frame frame; /* * public JDialog(Dialog owner, String title, boolean modal) * 创建一个具有指定标题、模式和指定所有者 Dialog 的对话框。 此构造方法将该组件的语言环境属性设置为 * JComponent.getDefaultLocale 所返回的值。 * * 参数: owner - 显示该对话框的所有者 Dialog; 如果此对话框没有所有者,则为 null * title -该对话框的标题栏中所显示的 String * modal - 指定对话框在显示时是否阻塞用户向其他顶层窗口输入。如果为true,则模式类型属性被设置为 DEFAULT_MODALITY_TYPE; * 否则对话框是无模式的。 * 抛出: * HeadlessException - 如果 GraphicsEnvironment.isHeadless() 返回 true。 */ JDialog dialog = new JDialog(frame, "查询对话框", true); public Operation(String str, int n) { dialog.setSize(450, 300); //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, dialog.setLocation(width / 2 - 200, height / 2 - 150); Container c = dialog.getContentPane(); /*GridLayout(int rows, int cols, int hgap, int vgap) : 创建具有指定行数、列数以及组件水平、纵向一定间距的网格布局。*/ dialog.setLayout(new GridLayout(2, 1, 5, 5)); JLabel LOperation = new JLabel("请输入要" + str + "人员的名字"); final JTextField Tname = new JTextField(10);//单行文本输入框 JButton sure = new JButton("确定"); JButton cancel = new JButton("取消"); JPanel pane1 = new JPanel(); JPanel pane2 = new JPanel(); c.add(pane1); c.add(pane2); pane1.add(LOperation); pane1.add(Tname); pane2.add(sure); pane2.add(cancel); dialog.setDefaultCloseOperation(dialog.DISPOSE_ON_CLOSE); if (n == 2) { sure.addActionListener(new ActionListener() // 查询 { public void actionPerformed(ActionEvent e) { try { FileReader file = new FileReader("D:\\AddressBook.txt"); Scanner find = new Scanner(file); /* * 这里while括号里面的find.hasNext()方法用于判断find对象中有没有下一条数据 * 返回 bool 值 , 有则返回true 无 则返回false * 下面的find.next()是获取find对象中的值 然后赋值给 str 然后输出这个方法 * 其实就是循环输出it 对象中所有的值 */ while (find.hasNext()) { if (find.next().equals(Tname.getText())) { dialog.dispose();//关闭窗体,并释放一部分资源。 Type fd = new Type(); fd.frame = new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); fd.Csex.select(find.next()); fd.Tunit.setText(find.next()); fd.Thomephone.setText(find.next()); fd.Temail.setText(find.next()); fd.Ttelephone.setText(find.next()); fd.Type(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if (n == 3) { sure.addActionListener(new ActionListener() // 删除 { public void actionPerformed(ActionEvent e) { try { File file = new File("D:\\AddressBook.txt");//创建文件 Scanner find = new Scanner(file);//输入 FileWriter file1 = new FileWriter("D:\\AddressBook1.txt", true); PrintWriter write = new PrintWriter(file1); while (find.hasNext()) {//取下一个元素 String s = find.next(); if (!(s.equals(Tname.getText()))) { write.print(s + "\t"); write.print(find.next() + "\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.println(find.next()); } else { find.next(); find.next(); find.next(); find.next(); find.next(); } } // file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2 = new File("D:\\AddressBook1.txt"); file2.renameTo(new File("D:\\AddressBook.txt")); JOptionPane.showMessageDialog(null, "删除成功", "删 除 结 果", JOptionPane.INFORMATION_MESSAGE); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); JOptionPane.showMessageDialog(null, "未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if (n == 4) { sure.addActionListener(new ActionListener() // 修改 { public void actionPerformed(ActionEvent e) { try { File file = new File("D:\\AddressBook.txt"); Scanner find = new Scanner(file); FileWriter file1 = new FileWriter("D:\\AddressBook1.txt", true); PrintWriter write = new PrintWriter(file1); while (find.hasNext()) { String s = find.next(); if (!(s.equals(Tname.getText()))) { write.print(s + "\t"); write.print(find.next() + "\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.println(find.next()); } else { dialog.dispose(); Type fd = new Type(); Type.y = 1; fd.frame = new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); String s1 = find.next(); fd.Csex.select(s1); String s2 = find.next(); fd.Tunit.setText(s2); String s5 = find.next(); fd.Thomephone.setText(s5); String s6 = find.next(); fd.Temail.setText(s6); String s7 = find.next(); fd.Ttelephone.setText(s7); fd.Type(); if (Type.z == 1) { write.print(Tname.getText() + "\t"); write.print(s1 + "\t"); write.print(s2 + "\t\t"); write.print(s5 + "\t\t"); write.print(s6 + "\t\t"); write.println(s7); Type.z = 2; } } } // file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2 = new File("D:\\AddressBook1.txt"); file2.renameTo(new File("D:\\AddressBook.txt")); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } cancel.addActionListener(new ActionListener() // 取消 { public void actionPerformed(ActionEvent e) { dialog.dispose();//关闭查询面板 } }); } } class Print{ public JTextArea area;// 多行文本输入框 public Print(String st, int n) { JFrame frame = new JFrame(st + "信息如下"); area = new JTextArea();// 多行文本输入框 frame.add(area); frame.setVisible(true); frame.setSize(1000, 500); frame.setLocation(350, 150);// 显示位置坐标 if (n == 2) try // 排序 { int i, j, k; String[] all; all = new String[1000]; BufferedReader read = new BufferedReader(new FileReader("D:\\AddressBook.txt")); area.append("姓 名" + "\t" + "性别" + "\t" + "单位" + "\t\t" + "住宅电话" + "\t\t" + "Email" + "\t\t\t" + "移动电话" + '\n'); int z = 1, count = 0; while (z == 1) { for (i = 0; i < 1000; i++) { String str = read.readLine(); if (str != null) { all[i] = str; count++; } else z = 0; } } String[] bll; bll = new String[count]; for (i = 0; i < count; i++) bll[i] = all[i]; getSortOfChinese(bll);// 调用排序函数 for (i = 0; i < count; i++) area.append(bll[i] + '\n');// 在指定元素的结尾追加内容 read.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } if (n == 1) try // 指定类人员 { FileReader file = new FileReader("D:\\AddressBook.txt"); Scanner find = new Scanner(file); area.append("姓 名" + "\t" + "性别" + "\t" + "单位" + "\t\t" + "住宅电话" + "\t\t" + "Email" + "\t\t\t" + "移动电话" + '\n'); while (find.hasNext()) { String str1 = find.next(); String str2 = find.next(); if (str2.equals(st)) { area.append(str1 + "\t"); area.append(str2 + "\t"); area.append(find.next() + "\t\t"); area.append(find.next() + "\t\t"); area.append(find.next() + "\t\t"); area.append(find.next() + '\n'); } else { find.next(); find.next(); find.next(); find.next(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } } private void getSortOfChinese(String[] bll) { // TODO Auto-generated method stub } } class Type implements ActionListener { public static int z = 2; public static int y = 0; public JLabel Lname, Lsex, Lunit, Lhomephone, Lemail, Ltelephone, Lnote;//添加标签 public JTextField Tname = new JTextField(15), Thomephone = new JTextField(25), Temail = new JTextField(25),Ttelephone = new JTextField(25), Tunit = new JTextField(25); public Choice Csex = new Choice();//创建文本框 public JButton sure, cancel;//添加“确定”“取消”按钮 public JFrame frame = new JFrame("录入联系人信息");//面板标题 public Type() { Csex.addItem("男");//给列表框或组合框等具有列表的对象添加项目 Csex.addItem("女"); } public void Type() { Container c = frame.getContentPane();//创建容器 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击窗口的关闭按钮时程序执行的操作 frame.setSize(800, 400);//窗口大小 frame.setLayout(new GridLayout(7, 2, 7, 7));//设置用户界面上的屏幕组件的格式布局 frame.setVisible(true);//设置面板可见 //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); Lname = new JLabel("姓名");//标签 Lsex = new JLabel("性别"); Lunit = new JLabel("单位"); Lhomephone = new JLabel("住宅电话"); Lemail = new JLabel("Email"); Ltelephone = new JLabel("移动电话"); sure = new JButton("确定"); cancel = new JButton("取消"); JPanel pane1 = new JPanel();//添加面板 JPanel pane2 = new JPanel(); JPanel pane3 = new JPanel(); JPanel pane5 = new JPanel(); c.add(pane1);//将面板添加到容器中 c.add(pane2); c.add(pane3); c.add(pane5); pane1.add(Lname);//将标签添加到面板 pane1.add(Tname); pane1.add(Lsex); pane1.add(Csex); pane2.add(Lunit); pane2.add(Tunit); pane2.add(Lhomephone); pane2.add(Thomephone); pane3.add(Lemail); pane3.add(Temail); pane3.add(Ltelephone); pane3.add(Ttelephone); pane5.add(sure); pane5.add(cancel); sure.addActionListener(new ActionListener() // 设置监听器 { public void actionPerformed(ActionEvent e) // 用匿名内部类实现监听器 { if (Tname.getText().equals(""))//输入的姓名是否为空 /* * 显示一个错误对话框,该对话框显示的 message 为 'alert': * JOptionPane.showMessageDialog(null, "alert", * "alert", JOptionPane.ERROR_MESSAGE); */ JOptionPane.showMessageDialog(null, "录入失败姓名必须填写", "录入结果", JOptionPane.INFORMATION_MESSAGE); else { try { FileWriter AddressBook = new FileWriter("D:\\AddressBook.txt", true);//写入文件 PrintWriter add = new PrintWriter(AddressBook); String s1, s2, s3,s4; if (Tunit.getText().equals(""))//未输入数据 s1 = "无"; else s1 = Tunit.getText(); if (Thomephone.getText().equals("")) s2 = "无"; else s2 = Thomephone.getText(); if (Temail.getText().equals("")) s3 = "无"; else s3 = Temail.getText(); if (Ttelephone.getText().equals("")) s4 = "无"; else s4 = Ttelephone.getText(); add.println(Tname.getText()+ "\t" + Csex.getSelectedItem() + "\t" + s1 + "\t\t" + s2 + "\t\t" + s3 + "\t\t" + s4); add.close(); AddressBook.close(); z = 1; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (y == 0) { JOptionPane.showMessageDialog(null, "录入成功", "录入结果", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, "修改成功", "修改结果", JOptionPane.INFORMATION_MESSAGE); } Tname.setText(""); //删除时传入空白串 Tunit.setText(""); Thomephone.setText(""); Temail.setText(""); Ttelephone.setText(""); } } }); cancel.addActionListener(new ActionListener() // 设置监听器 { public void actionPerformed(ActionEvent e) // 用匿名内部类实现监听器 { frame.dispose();//关闭面板 z = 0; } }); } public void actionPerformed(ActionEvent e) { new Type().Type(); } }

初学Java,一些事件处理问题,help!!!!!!

# **出现以下错误: # 1、可以改变对话框中字体大小,无法改变字体种类。 # 2、且无法将改变的效果传递到主窗口。 # 3、对话框setModel的值为true,还是能点到主窗口 # 4、可以通过下拉框可改变标签字体大小,但是为什么我改变了字体大小之后,我点那个字体种类的下拉框没有出现下拉列表呢?是不是两个下拉列表有冲突呢? # ** **以下代码分别在4个java文件中** java程序,编写一个JDialog的子类FontDialog,该类为FontFamily对象维护的数据视图,要求FontDialog对象使用下拉列表显示FontFamily对象维护的全部字体的名称,当选择下拉列表中某个字体名称后,FongDialog对象使用标签显示字体的效果。要求对话框提供返回下拉列表所选择的字体名称的方法 编写一个窗口,该窗口有“设置字体”按钮和一个文本区对象,当单击按钮时,弹出一个FontDialog对话框,然后根据用户在下拉列表中选择的字体来显示文本区中的文本。 ``` package test; public class E9_2 { public static void main(String args[]){ window1 window = new window1(); } } ``` ``` package test; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; public class Fontdialog extends JDialog implements ActionListener,ItemListener{ JComboBox name,size; JPanel north,center,south; JButton confirm,cancel; Label label; String allnames[]; int sizes[]; String font_name = "Adobe Arabic"; int font_size = 24; Font f,font; int tag; Fontdialog(){ setModal(true); setBounds(400,400,700,400); setLayout(new BorderLayout()); setTitle("字体对话框"); f = new Font(font_name,1,font_size); name = new JComboBox(); size = new JComboBox(); name.setMaximumRowCount(5); size.setMaximumRowCount(5); createitem(); north = new JPanel(); south = new JPanel(); center = new JPanel(); confirm = new JButton("Yes"); cancel = new JButton("Cancel"); label = new Label("hello,Java程序"); label.setFont(f); north.setLayout(new FlowLayout()); center.setLayout(new BorderLayout()); south.setLayout(new FlowLayout()); north.add(name); north.add(size); center.add(label,BorderLayout.CENTER); south.add(confirm); south.add(cancel); confirm.addActionListener(this); cancel.addActionListener(this); name.addItemListener(this);/*new ItemListener(){ public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED){ font_name = name.getSelectedItem().toString(); font = new Font(font_name,1,font_size); label.setFont(font); label.repaint(); validate(); } } });*/ size.addItemListener(this);/*new ItemListener(){ public void itemStateChanged(ItemEvent e){ if(e.getStateChange() == ItemEvent.SELECTED){ font_size = Integer.parseInt(size.getSelectedItem().toString()); font = new Font(font_name,1,font_size); label.setFont(font); label.repaint(); validate(); } } });*/ name.addActionListener(this); size.addActionListener(this); add(north,BorderLayout.NORTH); add(south,BorderLayout.SOUTH); add(center,BorderLayout.CENTER); } void createitem(){ allnames = new FontFamilyNames().getFontName(); for(int i=0;i<allnames.length;i++){ name.addItem(allnames[i]); } sizes = new int[80]; for(int i=0;i<sizes.length;i++){ sizes[i]=i+1; } for(int i:sizes){ size.addItem(String.valueOf(i)); } } public String get_fontname(){ return font_name; } public int get_fontsize(){ return font_size; } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == cancel){ this.dispose(); } if(e.getSource()== confirm){ tag = 1; this.setVisible(false); } } public void itemStateChanged(ItemEvent e) { if(e.getSource()==name){ font_name = (String)name.getSelectedItem(); font = new Font(font_name,1,font_size); label.setFont(font); label.repaint(); } if(e.getSource()==size){ font_size = Integer.parseInt(size.getSelectedItem().toString()); font = new Font(font_name,1,font_size); label.setFont(font); label.repaint(); } } } ``` ``` package test; import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextArea; public class window1 extends JFrame implements ActionListener { JTextArea text; JButton button; String fontname; int fontsize; Font font; window1(){ text = new JTextArea(); button.addActionListener(this); init(); setVisible(true); setBounds(200,200,800,400); validate(); } void init(){ Font font = text.getFont(); text.setText("Java 2实用教程(第四版)"); text.setFont(new Font(font.getName(), font.getStyle(), 60)); button = new JButton("设置字体"); setLayout(new BorderLayout()); add(button,BorderLayout.NORTH); add(text,BorderLayout.CENTER); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()== button){ Fontdialog fontdialog = new Fontdialog(); fontdialog.setVisible(true); if(fontdialog.tag == 1){ fontsize = fontdialog.get_fontsize(); fontname = fontdialog.get_fontname(); font = new Font(fontname,1,fontsize); text.setFont(font); text.repaint(); validate(); } } } } ``` ``` package test; import java.awt.GraphicsEnvironment; public class FontFamilyNames { String allFontNames[]; public String [] getFontName() { GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); allFontNames=ge.getAvailableFontFamilyNames(); return allFontNames; } } ```

java组件以及事件处理方面

可以运行,不过没有满足要求,点击ok按钮后没有实现监视器policelistener中的计算功能,求能人帮忙解答 import java.awt.*; import javax.swing.*; import java.awt.event.*;//?这个应该属于java.awt public class Example9_7 { public static void main(String args[]) { WindowActionEvent win=new WindowActionEvent(); PoliceListen police=new PoliceListen();//创建监视器 win.setMyCommandListener(police);//窗口组合监视器 win.setBounds(100,100,460,360); win.setTitle("处理事件"); } } class WindowActionEvent extends JFrame//组件加入事件,处理事件 { JTextField text1;//p1.x JTextField text2;//p1.y JTextField text3;//p2.xa JTextField text4;//p2.y JTextArea text5;//创建分别访问数据的文本框 JButton button;//加入确认按钮,这个按钮是事件源? MyCommandListener listener;//Actionlistener的子类创建listener public WindowActionEvent() { init(); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } void init() { setLayout(new FlowLayout()); text1=new JTextField(10);//这个部分是怎样操作文本框的? text2=new JTextField(10); text3=new JTextField(10); text4=new JTextField(10);//分配空间给出参数 text5=new JTextArea(9,20); button=new JButton("OK"); add(new JLabel("p1.x:"));//Label为为用户提供信息的标签 add(text1); add(new JLabel("p1.y:")); add(text2); add(new JLabel("p2.x:")); add(text3); add(new JLabel("p2.y:")); add(text4);//将文本框加入容器 add(button); add(new JLabel("result:"));//???注意此处原文给出的是文本区 add(new JScrollPane(text5)); } void setMyCommandListener(MyCommandListener Listener)//函数作用是设置我的监听器,参数是我的监听器 { this.listener=listener;//调用设置方法将某个对象设置为自己的监听器 listener.setJTextField1(text1); listener.setJTextField2(text2); listener.setJTextField3(text3); listener.setJTextField4(text4);//通过listener调用以后会用到的函数 listener.setJTextArea(text5);//text5是用来输出的 button.addActionListener(listener);//此时事件源是button } } interface MyCommandListener extends ActionListener { public void setJTextField1(JTextField text); public void setJTextField2(JTextField text); public void setJTextField3(JTextField text); public void setJTextField4(JTextField text); public void setJTextArea(JTextArea area); }//此类是ActionListenr的子类,而父类只有一个actionperformed函数 class PoliceListen implements MyCommandListener//负责创建监视器的类 { JTextField text1; JTextField text2; JTextField text3; JTextField text4; JTextArea text5;//注意text5是用来显示 public void setJTextField1(JTextField text) { text1=text; } public void setJTextField2(JTextField text) { text2=text; } public void setJTextField3(JTextField text) { text3=text; } public void setJTextField4(JTextField text) { text4=text; } public void setJTextArea(JTextArea Area) { text5=Area; }//此处是向文本框传递文本 public void actionPerformed(ActionEvent e) { double d=0; double x1=Double.parseDouble(text1.getText()); double y1=Double.parseDouble(text2.getText()); double x2=Double.parseDouble(text3.getText()); double y2=Double.parseDouble(text1.getText()); d=((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); text5.append("距离是:"+d); } }

java在匿名内部类中如何访问外部的变量?

``` package 线程优先级; import java.awt.*; import javax.swing.*; public class MyThread extends JFrame { static int i=0; private static Thread thread[]=new Thread[4]; private static JProgressBar pb[]=new JProgressBar[4]; public MyThread(String title) { super(title); Container container=this.getContentPane(); container.setLayout(new GridLayout(4,1)); for(int i=0;i<4;i++) { pb[i]=new JProgressBar(); pb[i].setStringPainted(true); } while(i<4) { thread[i]=new Thread(new Runnable(){ public void run(){ int progress=0; while(progress<=100) { try{ Thread.sleep(100); }catch(Exception e) { e.printStackTrace(); } pb[i].setValue(progress++); //此处有问题 } } } ); i++; } for(int i=0;i<4;i++) container.add(pb[i]); this.setSize(400,400); this.setVisible(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); thread[0].setPriority(5); thread[1].setPriority(5); thread[2].setPriority(4); thread[3].setPriority(3); i=0; while(i<4) { thread[i].start(); i++; } } public static void main(String[] args) { new MyThread("线程优先级"); } } ``` 这段代码由于我在run()方法里设置进度条的数字时用了静态变量,导致在调用线程start()方法的时候里面的进度条只动了一条。如果不用静态变量的话我又不知道怎么在Runnable的匿名内部类中访问外部循环的i,有没有什么办法在匿名内部类中能够访问外部的参数,而且不是常量不是静态变量?

想作图java, 每次按button都报错,空指针异常

``` package control; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import javax.swing.JButton; import elements.Circle; import elements.Elements; import elements.Line; import elements.Rectangle; public class Control implements ActionListener, MouseListener, MouseMotionListener { Graphics g; public String doit = ""; public int x1, y1, x2, y2; //鼠标的按下和释放时的坐标 // private Color curColor;//当前画笔颜色 ArrayList <Elements> drawX = new ArrayList <Elements>(); public ArrayList<Elements> getDrawX() { return drawX; } public void setDrawX(ArrayList<Elements> drawX) { this.drawX = drawX; } public void setG(Graphics g) { this.g= g; }//传递画笔 @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals("")) { Color newcolor = new Color((int) e.getSource()); g.setColor(newcolor); } else { doit = e.getActionCommand(); JButton buttonblack = new JButton(); buttonblack.setBackground(java.awt.Color.black); Color coloruse = buttonblack.getBackground(); g.setColor(coloruse); } } @Override public void mouseMoved(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { System.out.println("2");// 鼠标点下 点x1,y1 x1 = e.getX(); y1 = e.getY(); } @Override public void mouseReleased(MouseEvent e) { x2=e.getX(); y2=e.getY(); } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { System.out.println("3"); if ( doit.equals("circle")) { drawX.add(new Circle(x1, y1, x2, y2)); } if ( doit.equals("rectangle")) { drawX.add(new Rectangle(x1, y1, x2, y2)); } if ( doit.equals("line")) { drawX.add(new Line(x1, y1, x2, y2)); } } } ============================= package view; import java.awt.*; import javax.swing.*; import control.Control; import java.awt.event.*; public class Gui extends JFrame { public Control drawit; private static final long serialVersionUID = 1L; public Gui() { JFrame frame = new JFrame("miniCAD"); JPanel panelBig = new JPanel();//画板 JPanel panelSmall = new JPanel();//图形和颜色板 JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panelBig, panelSmall); panelBig.setBackground(Color.white); panelSmall.setBackground(Color.white); pane.setRightComponent(panelSmall); pane.setLeftComponent(panelBig); pane.setContinuousLayout(true); pane.setOneTouchExpandable(true); // Container C = frame.getContentPane(); // C.add(pane); frame.add(pane); //添加图形 JButton buttoncircle = new JButton("circle"); JButton buttonline = new JButton("line"); JButton buttonrectangle = new JButton("rectangle"); JButton buttontext = new JButton("text"); JButton buttontriangle = new JButton("triangle"); frame.setVisible(true); panelSmall.setLayout(new GridLayout(6,1,0,0)); panelSmall.add(buttoncircle); panelSmall.add(buttonline); panelSmall.add(buttonrectangle); panelSmall.add(buttontext); panelSmall.add(buttontriangle); //监听使用哪个图形 control.Control monitor = new control.Control(); buttoncircle.addActionListener(monitor); buttonline.addActionListener(monitor); buttonrectangle.addActionListener(monitor); buttontext.addActionListener(monitor); buttontriangle.addActionListener(monitor); //添加颜色板 JPanel colorpane = new JPanel(); panelSmall.add(colorpane); colorpane.setLayout(new GridLayout(3,3)); JButton buttonred = new JButton(); buttonred.setBackground(Color.red); colorpane.add(buttonred); JButton buttonblack = new JButton(); buttonblack.setBackground(Color.black); colorpane.add(buttonblack); JButton buttonblue = new JButton(); buttonblue.setBackground(Color.blue); buttonblue.setContentAreaFilled(false); colorpane.add(buttonblue); JButton buttongreen = new JButton(); buttongreen.setBackground(Color.green); colorpane.add(buttongreen); JButton buttongray = new JButton(); buttongray.setBackground(Color.gray); colorpane.add(buttongray); JButton buttonwhite = new JButton(); buttonwhite.setBackground(Color.white); colorpane.add(buttonwhite); JButton buttonyellow = new JButton(); buttonyellow.setBackground(Color.yellow); colorpane.add(buttonyellow); JButton buttonpink = new JButton(); buttonpink.setBackground(Color.pink); colorpane.add(buttonpink); JButton buttonorange = new JButton(); buttonorange.setBackground(Color.orange); colorpane.add(buttonorange); frame.setVisible(true); //添加颜色监听器 control.Control color = new control.Control(); buttonred.addActionListener(color); buttonblack.addActionListener(color); buttonblue.addActionListener(color); buttongreen.addActionListener(color); buttongray.addActionListener(color); buttonwhite.addActionListener(color); buttonyellow.addActionListener(color); buttonpink.addActionListener(color); buttonorange.addActionListener(color); control.Control drawit = new control.Control(); panelBig.addMouseListener(drawit); panelBig.addMouseMotionListener(drawit); drawit.setG(panelBig.getGraphics()); } public static void main(String[] args) { Gui pic = new Gui(); } } 在control类里 g.setColor(coloruse);这句报错,查了下资料,我想可能是Graphics g问题或者是JPanel问题,不知道怎么改 ```

能不能在jp3板块帮忙添加按钮插入图片功能和改变一下面板的背景颜色,拜托谢谢各位大神!

``` public class Client_Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String ipAdd = "127.0.0.1"; int port =8000; Client client = new Client(ipAdd,port); } } ``` ``` import java.awt.BorderLayout; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.*; public class Client extends JFrame { // 成员变量 JPanel jp1 = new JPanel(); JPanel jp2 = new JPanel(); JPanel jp3 = new JPanel(); JTextArea jta = new JTextArea(15, 40); JTextField jtf = new JTextField(); JButton jbt1 = new JButton("清除记录"); JButton jbt2 = new JButton("存储记录"); JButton jbt3 = new JButton("读取记录"); JLabel jlb = new JLabel(); FileWriter fw; FileReader fr; Socket socket = null; DataOutputStream dos = null; DataInputStream dis = null; String ipAdd = ""; int port = 0; String readStr = ""; String jtaStr = ""; // 构造方法 public Client(String ipAdd, int port) { setLocation(300, 400); setSize(400, 500); setVisible(true); add(jp1, BorderLayout.NORTH); add(jp2, BorderLayout.CENTER); add(jp3, BorderLayout.SOUTH); jp1.setLayout(new BorderLayout()); jp1.add(jta, BorderLayout.NORTH); jp1.add(jtf, BorderLayout.SOUTH); jp2.add(jbt1); jp2.add(jbt2); jp2.add(jbt3); jp3.add(jlb); jlb.setText("当前状态:"); pack(); this.ipAdd = ipAdd; this.port = port; // 调用网络连接 netConnect(); // 挂载侦听器 jtf.addActionListener(new MyActionListener()); jbt1.addActionListener(new MyActionListener()); jbt2.addActionListener(new MyActionListener()); jbt3.addActionListener(new MyActionListener()); } // 网络连接方法 public void netConnect() { try { socket = new Socket(this.ipAdd, this.port); jlb.setText("服务器连接成功" + socket); dos = new DataOutputStream(socket.getOutputStream()); dis = new DataInputStream(socket.getInputStream()); JtaReadThread jrt = new JtaReadThread(); Thread thread = new Thread(jrt); thread.start(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // 新建侦听器类(内部类) private class MyActionListener implements ActionListener { public void actionPerformed(ActionEvent arg0) { if (arg0.getSource().equals(jtf)) { try { dos.writeUTF(jtf.getText()); jtf.setText(""); // jta.setText(jta.getText()+"\n"+dis.readUTF()); } catch (IOException e) { e.printStackTrace(); } } if (arg0.getSource().equals(jbt1)) { jta.setText(""); } // 保存记录侦听器 if (arg0.getSource().equals(jbt2)) { byte b[] = jta.getText().getBytes(); try { fw = new FileWriter("d:\\chatLog2.txt", true); fw.write(jta.getText()); fw.close(); } catch (IOException e) { e.printStackTrace(); } jlb.setText("记录保存成功"); } // // 读取记录侦听器------jbt3 :FR读取记录 if (arg0.getSource().equals(jbt3)) { int b = 0; try { fr = new FileReader("d:\\chatLog2.txt"); while ((b = fr.read()) != -1) { System.out.print((char) b); } fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 新建子线程类,用于读取服务器发送的广播数据 private class JtaReadThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub while (true) { try { readStr = dis.readUTF(); jtaStr = jtaStr + '\n' + readStr; jta.setText(jtaStr ); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } ``` ``` import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; //服务器工作过程: //1.指定某个端口提供TCP服务 //2.等待客户端的连接(阻塞:傻等) //3.如果需要接收多个客户端,建议使用“死”循环语句 public class Server { ServerSocket ss = null; Socket socket = null; int port =0; //集合:用于存储每个客户端和服务器的连接(存储子线程) List<SubThread> mylist = new ArrayList<SubThread>(); Server(int port) { this.port = port; try { ss = new ServerSocket(this.port); System.out.println("服务器已经启动,port8000"); while (true) { socket = ss.accept(); System.out.println("客户端已连接"); //传递socket 给子线程,socket参数在构造方法中传递 SubThread subThread = new SubThread(socket); //将构造好的子线程实例存入集合中 mylist.add(subThread); Thread thread = new Thread(subThread); thread.start(); } } catch (IOException e) { e.printStackTrace(); } } //新建内部类:子线程 private class SubThread implements Runnable{ //成员变量:通道、读写 Socket socket = null; DataInputStream dis = null; DataOutputStream dos = null; String strRead = ""; SubThread(Socket socket){ this.socket = socket; try { dis = new DataInputStream(socket.getInputStream()); dos = new DataOutputStream(socket.getOutputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run() { // TODO Auto-generated method stub //开始读写操作 while(true){ try { strRead = dis.readUTF(); System.out.println(strRead); for(int i=0; i<mylist.size(); i++){//遍历所有客户端,写! //取得当前的客户端的连接(socket)将strRead内容写给当前的客户端 mylist.get(i).dos.writeUTF(strRead); } } catch (IOException e) { e.printStackTrace(); } } } } } ``` ``` public class ServerRun { public static void main(String[] args) { // TODO Auto-generated method stub int serverPort = 8000; Server server = new Server(serverPort); } } ![图片说明](https://img-ask.csdn.net/upload/201906/27/1561601303_757012.jpg) ```

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解! 目录 博客声明 大数据了解博主粉丝 博主的粉丝群体画像 粉丝群体性别比例、年龄分布 粉丝群体学历分布、职业分布、行业分布 国内、国外粉丝群体地域分布 博主的近期访问每日增量、粉丝每日增量 博客声明 因近期博主写专栏的文章越来越多,也越来越精细,逐步优化文章。因此,最近一段时间,订阅博主专栏的人数增长也非常快,并且专栏价

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

用了这个 IDE 插件,5分钟解决前后端联调!

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |李海庆我是一个 Web 开发前端工程师,受到疫情影响,今天是我在家办公的第78天。开发了两周,...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

网上很多的文章和帖子中在介绍秒杀系统时,说是在下单时使用异步削峰来进行一些限流操作,那都是在扯淡! 因为下单操作在整个秒杀系统的流程中属于比较靠后的操作了,限流操作一定要前置处理,在秒杀业务后面的流程中做限流操作是没啥卵用的。

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

Java14 新特性解读

Java14 已于 2020 年 3 月 17 号发布,官方特性解读在这里:https://openjdk.java.net/projects/jdk/14/以下是个人对于特性的中文式...

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

疫情后北上广深租房价格跌了吗? | Alfred数据室

去年3月份我们发布了《北上广深租房图鉴》(点击阅读),细数了北上广深租房的各种因素对租房价格的影响。一年过去了,在面临新冠疫情的后续影响、城市尚未完全恢复正常运转、学校还没开学等情况下...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

又一起程序员被抓事件

就在昨天互联网又发生一起让人心酸的程序员犯罪事件,著名的百度不限速下载软件 Pandownload PC 版作者被警方抓获。案件大致是这样的:软件的作者不仅非法盗取用户数据,还在QQ群进...

应聘3万的职位,有必要这么刁难我么。。。沙雕。。。

又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是contr...

太狠了,疫情期间面试,一个问题砍了我5000!

疫情期间找工作确实有点难度,想拿到满意的薪资,确实要点实力啊!面试官:Spring中的@Value用过么,介绍一下我:@Value可以标注在字段上面,可以将外部配置文件中的数据,比如可以...

Intellij IDEA 美化指南

经常有人问我,你的 IDEA 配色哪里搞的,我会告诉他我自己改的。作为生产力工具,不但要顺手而且更要顺眼。这样才能快乐编码,甚至降低 BUG 率。上次分享了一些 IDEA 有用的插件,反...

【相亲】96年程序员小哥第一次相亲,还没开始就结束了

颜值有点高,条件有点好

太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

一图看完本文 一、 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、 TCP/IP 基础 1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为...

腾讯面试题: 百度搜索为什么那么快?

我还记得去年面腾讯时,面试官最后一个问题是:百度/google的搜索为什么那么快? 这个问题我懵了,我从来没想过,搜素引擎的原理是什么 然后我回答:百度爬取了各个网站的信息,然后进行排序,当输入关键词的时候进行文档比对……巴拉巴拉 面试官:这不是我想要的答案 我内心 这个问题我一直耿耿于怀,终于今天,我把他写出来,以后再问,我直接把这篇文章甩给他!!! 两个字:倒排,将贯穿整篇文章,也是面试官...

你怎么看欧阳娜娜空降阿里p8?

前段时间 欧阳娜娜空降阿里P8被骂上热搜 有网友调侃道: 名牌大学毕业的研究生 要在阿里没日没夜、加班加点、 全年无休奋斗5年,才可能有机会 和20岁的欧阳娜娜一起喝下午茶…… 本来嘛,大厂✖明星的营销无可厚非 那是什么让撸代码N年的程序员愤愤不平呢? 还不是因为升到P8真的太难了! 这是很多阿里人甚至互联网人遥不可及的梦想! 阿里P8到底有多牛? 根据知乎大V@半佛仙人透露的情况: 阿里P8基本上要求研究生 5 年以上经验,本科 7 年以上经验; P8 一般去小公司就是各种 O,一般公司(非国企、.

程序员因没转发公司内容,被领导扣500,辞职后:加了三行代码

现如今,程序员在一二线城市可谓是非常的抢手,毕竟年薪那么多,一般在工作了几年之后,程序员想要攒到一套房子的首付是不成问题的,所以一些大龄的女青年在相亲的时候要把程序员当成了首选。但表面上看起来风光的程序员,背地里也受了非常多的委屈,最近有一名程序员没有转发公司的内容到朋友圈被领导扣了500块,当他辞职了之后,却非常淡定。 从个这个帖子中,我们可以看出这名程序员的情绪还是比较激动的,因为没有转发公司的内容到朋友圈,就要被罚款500块,这是非常不合理,换做是别人也不肯接受,而且三次没有转发就要被劝退,这是什么

相关热词 c# cad插入影像 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园
立即提问