java关于JFrame中添加多个JPanel?

如果创建一个JPanel数组,但是每个JPanel都画了一个图形,但是添加到面板容器上,只显示容器最后一个图形,为什么其它都没有显示?

4个回答

具体代码如何呢?没有代码不好排错啊

qq_32971073
youny样 回复毕小宝: 代码大概就是这样
大约 4 年之前 回复

图片说明图片说明图片说明

是不是没有设置布局?

qq_32971073
youny样 回复NK_test: 我想随自己的意思设置布局,但我还不会
大约 4 年之前 回复

没显示的话,,可能是覆盖了

qq_32971073
youny样 回复Royal_lr: 那覆盖是什么意思
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java 多个JPanel添加到一个JPanel里面出现的问题
我在主窗口类里面添加了JPanel 希望通过点击添加3个已经写好的Panel if(e.getActionCommand().equals("DES")) { desPan = new DesPanel(); jp.add(desPan.desPanel1, BorderLayout.WEST); jp.add(desPan.desPanel2, BorderLayout.CENTER); jp.add(desPan.desPanel3, BorderLayout.SOUTH); jp.validate(); } ![图片说明](https://img-ask.csdn.net/upload/201612/08/1481163204_151779.png) 结果如上 东西都被扭曲了,原本3个Panel添加到JFrame里面是这样的 ![图片说明](https://img-ask.csdn.net/upload/201612/08/1481163229_252391.png) 三个Panel的代码着这么写的,我调试了半天 也没能调整好 怎么解决啊 desPanel1 = new JPanel(); desPanel2 = new JPanel(); desPanel3 = new JPanel(); jl_des1 = new JLabel("Secret key:"); jl_des2 = new JLabel("Plain text:"); jl_des3 = new JLabel("Cipher text"); jtf_des1 = new JTextField(); // jtf_des1.setText(null); jtf_des2 = new JTextField(); // jtf_des2.setText(null); jtf_des3 = new JTextField(); // jtf_des3.setText(null); button_des1 = new JButton("Encipher"); button_des2 = new JButton("Decipher"); desPanel1.setLayout(new GridLayout(3,1)); desPanel2.setLayout(new GridLayout(3,1)); desPanel3.setLayout(new GridLayout(1,2)); desPanel1.add(jl_des1); desPanel1.add(jl_des2); desPanel1.add(jl_des3); desPanel2.add(jtf_des1); desPanel2.add(jtf_des2); desPanel2.add(jtf_des3); desPanel3.add(button_des1); desPanel3.add(button_des2); desPanel1.setLayout(new GridLayout(3,1)); desPanel2.setLayout(new GridLayout(3,1)); desPanel3.setLayout(new GridLayout(1,2)); ``` ```
java实现实验室教师远程学生桌面把jframe改成jpanel
网上找的代码如下 现在是一个一个窗口显示一个桌面 我想把他变成panel然后放在主界面那里(主界面需要监控多个学生的桌面)。。。可是渣渣不会改 package ServerWhat; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Toolkit; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.zip.ZipInputStream; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; public class RemoteMonitored extends JFrame { private static final long serialVersionUID = 1L; Dimension screenSize; public RemoteMonitored () { super(); screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setSize(800, 640); Screen p = new Screen(); Container c = this.getContentPane(); c.setLayout(new BorderLayout()); c.add(p, SwingConstants.CENTER); new Thread(p).start(); SwingUtilities.invokeLater(new Runnable(){ public void run() { setVisible(true); }}); } public static void main(String[] args) { new RemoteMonitored (); } class Screen extends JPanel implements Runnable { private static final long serialVersionUID = 1L; private Image cimage; public void run() { ServerSocket ss = null; try { ss = new ServerSocket(5001);// 探听5001端口的连接 while (true) { Socket s = null; try { s = ss.accept(); ZipInputStream zis = new ZipInputStream(s .getInputStream()); zis.getNextEntry(); cimage = ImageIO.read(zis);// 把ZIP流转换为图片 repaint(); } catch (Exception e) { e.printStackTrace(); } finally { if (s != null) { try { s.close(); } catch (IOException e) { e.printStackTrace(); } } } } } catch (Exception e) { } finally { if (ss != null) { try { ss.close(); } catch (IOException e) { e.printStackTrace(); } } } } public Screen() { super(); this.setLayout(null); } public void paint(Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D) g; g2.drawImage(cimage, 0, 0, null); } } }
java的swing程序设计,为窗体添加多个复选框组件
本人在练习java的swing程序设计,想为窗体添加多个复选框组件,目标是达到下面图片的效果 ![CSDN移动问答][1] 我的源代码是这样的: import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.WindowConstants; public class CheckBoxTest extends JFrame { private static final long serialVersionUID = -5028523145642314067L; public static void main(String[] args) { new CheckBoxTest(); } public CheckBoxTest() { Container c = getContentPane(); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); final JTextArea jt = new JTextArea(20, 50); c.setLayout(new BorderLayout()); c.add(panel1, BorderLayout.NORTH); JScrollPane scrollPane = new JScrollPane(jt); panel1.add(scrollPane); c.add(panel2, BorderLayout.SOUTH); for (int i = 0; i < 3; i++) { final JButton jb = new JButton("button" + i); jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 if (jb.isSelected()) jt.append("复选框i被选中\n"); } }); panel2.add(jb); } setSize(200, 200); setVisible(true); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } } 可是我运行后的结果却是这样的: ![CSDN移动问答][2] [1]: http://img.my.csdn.net/uploads/201408/07/1407341831_8466.PNG [2]: http://img.my.csdn.net/uploads/201408/07/1407342169_9151.PNG 怎么点击按钮都没有反应。。。 本人自学java,希望有大神能帮帮忙。。。
JPanel继承问题... 写了一个类,继承自JPanel,但是控件不显示,跪求求各位大牛...
在做一个世界各个国家的时间的一个Demo。写了一个继承自JPanel类的panel,里面简单的设置了一个Logo,国家名字,还有一个按秒跳动时间,现在的问题就是在这个panel上的控件都不显示了,调了好久了也没有找到原因,所以没办法了,特来求助各位大牛们..... 话不多说,直接贴代码: package timerDemo; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.Image; import java.awt.Panel; import java.util.Date; import java.util.GregorianCalendar; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; public class ClockDemo extends Panel implements Runnable{ private JLabel imageLabel; private JLabel localeLabel; private JLabel dataLabel; private JPanel panel; private Thread t; private GregorianCalendar calendar; public ClockDemo(String city,String time){ super(); panel=new JPanel(); imageLabel=new JLabel(); imageLabel.setLabelFor(imageLabel); ImageIcon imageL=new ImageIcon("Z:\\study\\JAVA\\JAVATimer\\watchgif.gif"); imageL.setImage(imageL.getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT)); imageLabel.setIcon(imageL); imageLabel.setHorizontalAlignment(SwingConstants.CENTER); localeLabel=new JLabel(city,JLabel.CENTER);//城市名 dataLabel=new JLabel(); panel.setLayout(new GridLayout(3,1)); panel.add(imageLabel); panel.add(localeLabel); panel.add(dataLabel); JFrame jf=new JFrame(); jf.getContentPane().add(panel); t=new Thread(this); t.start(); } public void showTime(){ String str=""; str=str+new Date(); dataLabel.setText(str); dataLabel.setHorizontalAlignment(SwingConstants.CENTER); } @Override public void run() { // TODO Auto-generated method stub try { Thread.sleep(1000); showTime(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ``` ```
(swing)用一个JPanel显示本地文件夹下多个图片的问题
现要用swing实现显示出制定文件夹下所有图片 <br /> <br />利用 JButton 触发 在JPanel中显示某一文件夹下的所有图片文件,但是每一次点击JButton时显示的总是第一次输入文件夹目录后点击显示的那些图片(除非此后选择一图片更多的文件夹),总之前一个目录下的图片总是要盖住以后的。 <br /> <br />请问是怎么回事? <br /> <br />public class first extends JFrame implements ActionListener { <br />        Image image; <br />        int new_w; <br />        int new_h; <br />        int framex=400; <br />        int framey=300; <br />        JPanel top = new JPanel(); <br />        JPanel center = new JPanel(); <br />        JTextField name = new JTextField(15); <br />        Container cp = new Container(); <br />        public first() { <br />                super("perfect"); <br />                setDefaultCloseOperation(EXIT_ON_CLOSE); <br />                init(); <br />                setVisible(true); <br />        } <br />        public static void main(String[] args) { <br />                new first(); <br />        } <br />        private void init() { <br />                JPanel top = new JPanel(); <br />          top.add(new JLabel("File :")); <br />          top.add(name); <br />          JButton b = new JButton("Show"); <br />          top.add(b); <br />          cp = getContentPane(); <br />          cp.add(BorderLayout.NORTH, top); <br />          <br />          name.setText("C:\\"); <br />          setSize(new Dimension(framex, framey)); <br />          b.addActionListener(this); <br />          } <br /> <br />        <br />        public void actionPerformed(ActionEvent e) { <br />        <br />         String pURL = "C:\\"; <br />        try { <br />        pURL = name.getDocument().getText(0, name.getDocument().getLength()); <br /> } catch (BadLocationException e1) { <br /> e1.printStackTrace(); <br /> } <br />                                    //得到该制定文件夹下所有图片文件的名称 <br /> ArrayList&lt;string&gt; imga = imgFiles(pURL); <br /> name.setText(pURL); <br />        image = Toolkit.getDefaultToolkit().getImage("C:\\Winter.JPG"); <br />        for(int dd = 0;dd&lt;imga.size();dd++){ &lt;br=""&gt;        } <br /> <br />        center = new Mypanel(pURL,imga); <br />                cp.add(BorderLayout.CENTER,center); <br />                center.validate(); <br /> <br />                getContentPane().validate(); <br />        } <br /> <br />} <br /> <br />class Mypanel extends javax.swing.JPanel { <br /> <br /> private static final long serialVersionUID = 1L; <br /> private Image image; <br /> private Image[] images; <br /> private ArrayList&lt;string&gt; name; <br /> <br /> Mypanel() { <br /> //this.image = Toolkit.getDefaultToolkit().getImage("C:\\Winter.JPG"); <br /> } <br /> <br /> Mypanel(String parentURL,ArrayList&lt;string&gt; imgarray){ <br /> name = imgarray; <br /> images = new Image[imgarray.size()]; <br /> for(int i=0;i&lt;imgarray.size();i++){ &lt;br=""&gt; <br /> System.out.println("imgs "+i+": "+imgarray.get(i)); <br /> if(imgarray.get(i)!=null){ <br /> images[i] = Toolkit.getDefaultToolkit().getImage(parentURL+"\\"+imgarray.get(i)); <br /> System.out.println("URL::"+parentURL+"\\"+imgarray.get(i)); <br /> } <br /> <br /> } <br /> <br /> } <br /> <br /> public void paintComponent(Graphics g) { <br /> <br /> System.out.println("################### Enter paintComponent : "+this.getToolTipText()); <br /> int x = 0; <br /> int y = 0; <br /> for(int i=0;i&lt;images.length;i++){ &lt;br=""&gt; //imgs[i] = Toolkit.getDefaultToolkit().getImage("C:\\"+); <br /> //if(images[]) <br /> //this.paintComponent(g); <br /> if(name.get(i)!=null){ <br /> if(x==0) x=20; <br /> else if(x+90+80&lt;400) x=x+90; <br /> else { <br /> x=20; <br /> y=y+70; <br /> } <br /> System.out.println("@@@@@@@ x:"+x+",y:"+y+"  name = "+name.get(i)+" "); <br /> <br /> g.drawImage(images[i], x, y,80,60, this); <br /> } <br /> } <br /> } <br />} <br /><strong>问题补充:</strong><br />firefly.li <br /> <br />不是因为没有刷新, <br /> <br />怀疑貌似是用了原来的JPanel对象, <br /> <br />可是从代码中找不出点儿头绪 <br /> <br />请指点下吧<br /><strong>问题补充:</strong><br />加上这些,代码就是全的了 <br /> <br />import java.awt.BorderLayout; <br />import java.awt.Container; <br />import java.awt.Dimension; <br />import java.awt.Graphics; <br />import java.awt.Image; <br />import java.awt.Rectangle; <br />import java.awt.Toolkit; <br />import java.awt.event.ActionEvent; <br />import java.awt.event.ActionListener; <br />import java.io.File; <br />import java.util.ArrayList; <br /> <br />import javax.swing.ImageIcon; <br />import javax.swing.JButton; <br />import javax.swing.JFrame; <br />import javax.swing.JLabel; <br />import javax.swing.JPanel; <br />import javax.swing.JTextField; <br />import javax.swing.text.BadLocationException; <br /> <br />谢谢!<br /><strong>问题补充:</strong><br />package nimgs; <br /> <br />import java.awt.BorderLayout; <br />import java.awt.Container; <br />import java.awt.Dimension; <br />import java.awt.Graphics; <br />import java.awt.Image; <br />import java.awt.Rectangle; <br />import java.awt.Toolkit; <br />import java.awt.event.ActionEvent; <br />import java.awt.event.ActionListener; <br />import java.io.File; <br />import java.util.ArrayList; <br /> <br />import javax.swing.ImageIcon; <br />import javax.swing.JButton; <br />import javax.swing.JFrame; <br />import javax.swing.JLabel; <br />import javax.swing.JPanel; <br />import javax.swing.JTextField; <br />import javax.swing.text.BadLocationException; <br />public class first extends JFrame implements ActionListener { <br />        Image image; <br />        int new_w; <br />        int new_h; <br />        int framex=400; <br />        int framey=700; <br />        //ssJButton hh = new JButton(); <br />        <br />        JPanel top = new JPanel(); <br />        <br />        JPanel center = new JPanel(); <br />        <br />        JTextField name = new JTextField(15); <br />        <br />        Container cp = new Container(); <br />  <br />      <br />        public first() { <br />                super("perfect"); <br />                setDefaultCloseOperation(EXIT_ON_CLOSE); <br />                init(); <br />                setVisible(true); <br />        } <br />        public static void main(String[] args) { <br />                new first(); <br />        } <br />        private void init() { <br />                //hh.setBounds(new Rectangle(165, 225, 91, 37)); <br />                //hh.setText("picture "); <br />                JPanel top = new JPanel(); <br />          top.add(new JLabel("File :")); <br />          top.add(name); <br />          JButton b = new JButton("Show"); <br />          top.add(b); <br />          //b.addActionListener(nameListener); <br />          <br />          <br />          if(center!=null) <br />  cp.remove(center); <br />          cp = getContentPane(); <br />          cp.add(BorderLayout.NORTH, top); <br />          <br /> <br />          <br />          //cp.add(BorderLayout.CENTER,center); <br />          //cp.add(new JScrollPane()); <br />          <br />          name.setText("C:\\"); <br />          System.out.println("init before ActionListioned!!!!!!!!!!!!!!"); <br />          b.addActionListener(this); <br />          System.out.println("init after  ActionListioned!!!!!!!!!!!!!!"); <br />          <br />          //center = new Mypanel(pURL,imga); <br /> cp.add(BorderLayout.CENTER,center); <br /> //center.validate(); <br /> cp.validate(); <br />             <br />               <br />                //getContentPane().setLayout(null); <br />                setSize(new Dimension(framex, framey)); <br /> <br />                //  getContentPane().add(hh); <br />                //cp.add(BorderLayout.SOUTH, panel); <br />                //cp.setVisible(true); <br />                //top.add(new JLabel("File :")); <br />                //getContentPane().BorderLayout(top); <br />        } <br /> <br />        <br />        public void actionPerformed(ActionEvent e) { <br />        <br />        center.removeAll(); <br /> <br />        String pURL = "C:\\"; <br />        try { <br />        pURL = name.getDocument().getText(0, name.getDocument().getLength()); <br />System.out.println(pURL); <br /> } catch (BadLocationException e1) { <br /> e1.printStackTrace(); <br /> } <br /> ArrayList&lt;string&gt; imga = imgFiles(pURL); <br /> name.setText(pURL); <br />                //ImageIcon img = new ImageIcon("Winter.jpg"); <br />                //Toolkit.getDefaultToolkit().getImage("C:\\Winter.JPG"); <br />                //image = img.getImage(); <br />        image = Toolkit.getDefaultToolkit().getImage("C:\\Winter.JPG"); <br />        for(int dd = 0;dd&lt;imga.size();dd++){ &lt;br=""&gt;System.out.println("imagename~~~:"+imga.get(dd)); <br />        } <br /> <br />                //Mypanel panel = new Mypanel(pURL,imga); <br />        center = new Mypanel(pURL,imga); <br />                <br />                //**************************** <br />                //center = null; <br />                //center = panel; <br /> <br />                //panel.setBounds(new Rectangle(1, 50, 300, 700)); <br />                //getContentPane().add(panel); <br />                <br />                //center.repaint(); <br />                <br />                //cp.add(BorderLayout.CENTER,null); <br />        //        cp.add(BorderLayout.CENTER,center); <br />        //        center.validate(); <br /> <br />         //       getContentPane().validate(); <br />        if(center!=null) <br />        cp.remove(center); <br />        center = new Mypanel(pURL,imga); <br />        cp.add(BorderLayout.CENTER,center); <br />        //center.validate(); <br />        cp.validate(); <br />                //getContentPane().repaint(); <br />                //getContentPane().setVisible(true); <br />                //panel.setVisible(true); <br />//        try { <br />//        Thread.sleep(1000); <br />//        } catch (InterruptedException e1) { <br />//        System.out.println(e1); <br />//        } <br />                //getContentPane().repaint(); <br />        } <br /> <br />        <br />    @SuppressWarnings("unchecked") <br /> private ArrayList&lt;string&gt; imgFiles(String parentURL){ <br />    String houzhui = new String(); <br />    File file = new File(parentURL); <br />    //File file = new File("C:\\"); <br />    int o = 0; <br />    ArrayList&lt;string&gt; imgarr = new ArrayList(); <br />    //String imgs[] = new String[5]; <br />    String ss[] = file.list(); <br />    //int o=0; <br />System.out.println("ss.length = "+ss.length); <br />    for(int i=0;i&lt;ss.length;i++){ &lt;br=""&gt;    //System.out.println("file:"+ss[i]+" @@ is File:"+(new File("C:\\"+ss[i])).isFile()); <br />    <br />    if(ss[i].indexOf(".")&gt;0 &amp;&amp; (new File(file,ss[i])).isFile()){ <br />    houzhui = ss[i].substring(ss[i].lastIndexOf(".")+1,ss[i].length()).toLowerCase(); <br />    //System.out.println(houzhui); <br />    if(houzhui.equals("jpg") <br />    ||houzhui.equals("gif") <br />    ||houzhui.equals("png") <br />    //||houzhui.equals("bmp") <br />    ||houzhui.equals("jpeg") <br />    ){ <br />    o++; <br />//System.out.println("imgarr:"+o+"  "+ss[i]); <br />    //imgs[o] = ss[i]; <br /> imgarr.add(ss[i]); <br />    //System.out.println("imgs:"+imgs[o]); <br />    //o++; <br />    //deitel = getImage(getDocumentBase(), ss[i]); <br />    //int width = deitel.getWidth(this); <br />    //int heigh = deitel.getHeight(this); <br />    //System.out.println("----------------------"+ss[i]+"  "+o+" width:"+width+" heigh:"+heigh); <br />    //g.drawImage(deitel, 1+(100*o), 30, 80, 60, this); <br />    //g.setPaintMode(); <br />    //g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer) <br />    //g.drawImage(deitel, 150, 30, width / 8, heigh / 8, this); <br />    } <br />    } <br />    } <br />    <br />    return imgarr; <br />    } <br />        <br />} <br /> <br />class Mypanel extends javax.swing.JPanel { <br /> <br /> private static final long serialVersionUID = 1L; <br /> private Image image; <br /> private Image[] images; <br /> private ArrayList&lt;string&gt; name; <br /> <br /> Mypanel() { <br /> //this.image = Toolkit.getDefaultToolkit().getImage("C:\\Winter.JPG"); <br /> } <br /> <br /> Mypanel(String parentURL,ArrayList&lt;string&gt; imgarray){ <br /> //System.out.println("$$$$$$$$$$$$$"); <br /> name = imgarray; <br /> images = new Image[imgarray.size()]; <br /> //System.out.println("imgarray.size(): "+imgarray.size()); <br /> for(int i=0;i&lt;imgarray.size();i++){ &lt;br=""&gt; <br /> System.out.println("imgs "+i+": "+imgarray.get(i)); <br /> if(imgarray.get(i)!=null){ <br /> images[i] = Toolkit.getDefaultToolkit().getImage(parentURL+"\\"+imgarray.get(i)); <br /> System.out.println("URL::"+parentURL+"\\"+imgarray.get(i)); <br /> } <br /> <br /> } <br /> <br /> } <br /> <br /> public void paintComponent(Graphics g1) { <br /> <br /> System.out.println("################### Enter paintComponent : "+this.getToolTipText()); <br /> int x = 0; <br /> int y = 0; <br /> Graphics g = (Graphics)g1; <br /> for(int i=0;i&lt;images.length;i++){ &lt;br=""&gt; //imgs[i] = Toolkit.getDefaultToolkit().getImage("C:\\"+); <br /> //if(images[]) <br /> //this.paintComponent(g); <br /> if(name.get(i)!=null){ <br /> if(x==0) x=20; <br /> else if(x+90+80&lt;400) x=x+90; <br /> else { <br /> x=20; <br /> y=y+70; <br /> } <br /> System.out.println("@@@@@@@ x:"+x+",y:"+y+"  name = "+name.get(i)+" "); <br /> <br /> g.drawImage(images[i], x, y,80,60, this); <br /> } <br /> } <br /> <br /> g=null; <br /> <br /> } <br />} <br /> <br /><br /><strong>问题补充:</strong><br />上面才是全部代码   谢谢!
关于Jpanel, JScrollPane ,Jtable嵌套使用的问题
如题,我先建了一个继承了JPanel的 ListAddMainPanel。在这个ListAddMainPanel中,我嵌套了一个JScrollPane类的panel_1,在这个JScrollPane里,我放置了一个Jtable,Jtable 使用了DefaultTableModel。(可能看着有点晕,其实很简单,就是下面的那个图片) 使用时,我是在JFrame里的contentPane里先新建一个底层Panel,然后调用这个ListAddMainPanel的构造函数。想要给Table里加数据时,调用这个ListAddMainPanel里之前写好的fulfillTable函数 菜鸟觉得这个架构理论上应该行得通,但是问题来了,无论我使用什么样的方法,比如addRow();addColumn();setColumnIdentifiers(); 测试显示没有问题,数据也传进去了,程序也没报错,可他的界面就是没有出现表格_(:зゝ∠)_ 换了很多种方法,都没奏效,于是默默来求大佬帮助_(:зゝ∠)_ ![图片说明](https://img-ask.csdn.net/upload/2 ``` package w.teacher; import java.awt.Dimension; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.JTextField; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JComboBox; public class ListAddMainPanel extends JPanel { // private JTable table1,table2,table3,table4,table5; public JLabel timeLabel; public JTable table; public DefaultTableModel tableModel; public JTextField textField; public JComboBox<String> gradeBox; public JButton addButton,importButton; /** * Create the panel. */ public ListAddMainPanel() { setLayout(null); setPreferredSize(new Dimension(856, 417)); setOpaque(false); JScrollPane panel_1 = new JScrollPane(table); panel_1.setBounds(14, 72, 493, 319); panel_1.setLayout(null); panel_1.setVisible(true); add(panel_1); //Table table = new JTable(tableModel); // tableModel = (DefaultTableModel)table.getModel(); // table.setPreferredScrollableViewportSize(new Dimension(493,319));//设置table大小 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//关闭表格列自动调整,此时水平滚动条可见 // table.setBounds(0, 0, 493, 319); panel_1.add(table);//原位置Table代码 table.setVisible(true); // tableModel.setColumnIdentifiers(name1111); panel_1.setViewportView(table);//原位置Table代码 } public void fulfillTable(String[] title,String[][] data) { // for(int i = 0;i<100;i++){ // for(int j = 0;j<7;j++) // System.out.println(data[i][j]); // } // tableModel = new DefaultTableModel(data, name); // table = new JTable(tableModel); if(title!=null) { for(int i = 0;i<title.length;i++) { tableModel.addColumn(title[i]); } } for(int i = 0;data[i+1][0]!=null;i++) { String[] mString = new String[data[i].length]; for(int y = 0;y<7;y++) { mString[y] = data[i][y]; System.out.println(mString[y]); } tableModel.addRow(mString); // System.out.println(mString); } } ```
java龟兔赛跑中关于线程调用repaint无效
参照了 https://bbs.csdn.net/topics/390752602 按照在线程中只改变一个已经声明的面板用repaint方法使小圆点移动的想法 进行编写编译器没有报错但是画面仍是没有改变。 java初学,大部分是按书敲的GUI和repaint( ) 方法是自己加的 求大佬帮帮忙 ```javascript import java.awt.Color; import java.awt.Graphics; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JPanel; public class Game extends JFrame{ static int BeginX=50,EndX=450; static int rabbitX=BeginX,rabbitY=100; //定义兔子的移动坐标 static int tortoiseX=BeginX,tortoiseY=300;//定以乌龟的移动坐标 static GamePanel gPanel = new GamePanel(rabbitX,rabbitY,tortoiseX,tortoiseY); //将画面面板初始化 public Game(){ this.add(gPanel);//加入画面面板 this.setTitle("龟兔赛跑"); this.setSize(800,680); this.setVisible(true); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Race race = new Race(); race.setDistance(100);//声明比赛的长度 Racer r = new Rabbit("兔子",5,gPanel);//声明一个兔子选手 Racer t = new Tortoise("乌龟",1,gPanel);//声明一个乌龟选手 r.attend(race);//将兔子加入选手列表 t.attend(race);//将乌龟加入选手列表 race.start();//启动线程 } public static void main(String[] args) { new Game();//初始化画面 } class Racer extends Thread{//选手类 String name; Race race; int speed; int dis =0;//移动的距离 int isEnd =0;//判断是否结束 Racer(String name,int speed){ this.name = name; this.speed = speed; } public void run() { } public void attend(Race r) { race = r; r.addRacer(this); } } class Rabbit extends Racer{//兔子选手 boolean isSleep = false; GamePanel g1; Rabbit(String name, int speed,GamePanel g1) { super(name, speed); this.g1 = g1;//将Game类中声明的面板传入 } public void run() { while(dis<=race.getDistance()) { dis += this.speed; //System.out.println("兔纸走了"+dis+"米"); try { Thread.sleep(1000); rabbitX += (speed*4); g1.repaint();//重绘画面但是无效 } catch (InterruptedException e) { e.printStackTrace(); } sleepy(); if(dis==race.getDistance()) { isEnd=1; } } } public void sleepy() {//兔子睡觉50%的几率,一场比赛最多睡一次 if(!isSleep) { int flag = (int)(Math.random()*2); if(flag==1) { //兔子要睡觉了 System.out.println("----------兔子要睡觉了-----------"); int sleepTime = (int)(Math.random()*61+60); try { Thread.sleep(sleepTime*1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(sleepTime+"----------兔子睡醒了-------------"); isSleep = true; } } } } class Tortoise extends Racer{//乌龟选手类 GamePanel g2; Tortoise(String name, int speed,GamePanel g2) { super(name, speed); this.g2 = g2;//传入Game类声明的面板 } public void run() { while(dis<=race.getDistance()) { tortoiseX += (speed*4); dis +=speed ; System.out.println("乌龟走了"+dis+"米"); try { Thread.sleep(1000); g2.repaint();//重绘但无效 } catch (InterruptedException e) { e.printStackTrace(); } if(dis==race.getDistance()) { isEnd =2; } } } } class Race{//比赛类 private int distance;//比赛距离 private ArrayList<Racer> racers= new ArrayList<Racer>();//比赛选手列表 public float getDistance() { return distance; } public void setDistance(int distance) { this.distance = distance; } public ArrayList<Racer> getRacers() { return racers; } public void setRacers(ArrayList<Racer> racers) { this.racers = racers; } //注册一个参赛者 public void addRacer(Racer racer) { racers.add(racer); } public void start() { for(Racer racer:racers) { racer.start(); } } } } class GamePanel extends JPanel{//画面面板 int rabbitX,rabbitY,tortoiseX,tortoiseY; GamePanel(int rabbitX,int rabbitY,int tortoiseX,int tortoiseY){ this.rabbitX = rabbitX; this.rabbitY = rabbitY; this.tortoiseX = tortoiseX; this.tortoiseY = tortoiseY; } public void paint(Graphics g) { //super.paint(g); //百度说这句可以刷新整个面板 g.setColor(Color.RED); g.fillOval(rabbitX, rabbitY, 15, 15); g.setColor(Color.BLACK); g.fillOval(tortoiseX, tortoiseY ,15,15); g.drawLine(600, 100, 600, 350); g.drawString("终", 600, 120); g.drawString("点", 600, 220); g.drawString("线", 600,320); } } ```
java 的swing的一个问题,有关滚动条的 jscrollpane
我在一个面板上面放上了许多jpanel,多到屏幕放不下,就是多余的部分显示不了, jframe和jpanel都试过了,然后我想到用一个滚动条可以使所有的内容都可以看到, 但是我使用了jscrollpane和jscrollbar都没有做好,结果是窗体的内容全部都看不见了, ,那这个滚动条该怎么加入,用哪个,
java如何停止当前正在运行的线程,新手求解答
最近想做一个无线数据监控服务端,用java做的,面板Jframe设置了一个Jpanel,我称这个为Jpanel 1 ,在Jpanel 1中我定义了一个多选JCheckbox,有四种监控方式可选:Bluetooth,Wifi,GPRS,Zigbee。还定义了一个JButton,分为开始ON,结束OFF,然后在JPanel 1中定义了JPanel 2,JPanel 2 中我定义了JScrollPane,scrollAndSetCursor用于实现滚动以及光标相关效果,程序运行的大致过程是这样的,我先选择监控方法,(方法是多选的,我想能够同步实现这几个方法),然后点击ON按钮就开始运行服务器程序了, **重点来了** , **我现在的问题是** ,停止按钮OFF不知道怎么设置方法能够让程序停止当前的线程,我想实现的是点击OFF后,当前的监控方式运行全部停止,(就跟刚开始巡行这个程序一样,可以重新开始选择监控方式,在重新点击ON又可以重新运行),现在就是不知道怎么在jbArray[1](ON按钮的监控事件)中定义,感觉自己写的jbArray[0](ON按钮)也有问题。(我其实是想实现这四种方法可以同步运行,互不干扰,多线程运行)希望各位哥哥姐姐帮帮忙,帮我改一改jbArray[0](按钮的监听事件)以及实现jbArray[1](OFF结束当前监控方式线程事件),谢谢各位了,代码稍微有点长,我全贴上来了,辛苦各位了 package SystemTray; import java.awt.AWTException; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Menu; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.Rectangle; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.Timer; import java.util.TimerTask; import javax.microedition.io.StreamConnection; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; import BluetoothChatServer.*; import GPRSChatServer.*; import WifiChatServer.*; import ZigbeeChatServer.*; public class SystemTrayDemo extends JFrame { protected JTextArea ta = new JTextArea(20,42); protected Timer timer = new Timer(); protected boolean jbarry = false; protected TrayIcon trayIcon = null; protected SystemTrayDemo(){ this.setTitle("Data monitoring server"); TrayInit(); WinInit(); //取得当前屏幕的宽度和高度 int width=Toolkit.getDefaultToolkit().getScreenSize().width; int height=Toolkit.getDefaultToolkit().getScreenSize().height; //设置窗体大小 this.setSize(610, 470); //设置窗体初始显示的位置 this.setLocation((width-610)/2, (height-470)/2); this.setResizable(false);//设置窗体不可调整大小 //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭方式,关闭窗体时同时结束程序 final JPanel jp1 = new JPanel(); jp1.setLayout(null);//不设置的话是无法设置jp2的大小。等同于窗口的大小。 JPanel jp2=new JPanel(); jp2.setBounds(110,20,480,390); //jp2.setBounds(new Rectangle(110,15,450,350));//设置jp2的左边距、上边距、长度、高度,在jp1没设置setLayout(null);是无效的 //jp2.setBackground(Color.gray);//设置框体的背景色 //jp2.setBorder(BorderFactory.createEtchedBorder(Color.black, Color.BLUE)); //设置框体的边框 final JScrollPane jsp = new JScrollPane(ta); jp2.add(jsp,BorderLayout.CENTER); jp1.add(jp2); /*ta.setText("Start.....\n"); TimerTask task = new TimerTask(){ public void run(){ ta.append("Time: " + (System.currentTimeMillis() / 1000) + "\n"); scrollAndSetCursor(); } }; time.schedule(task, 0, 1000);*/ //super(); //enableEvents(AWTEvent.WINDOW_EVENT_MASK); //创建标签数组 JLabel[] jlArray = {new JLabel("Switch"),new JLabel("Mode")}; //创建复选框数组 final JCheckBox[] jcbArray = {new JCheckBox("Bluetooth",true),new JCheckBox("Wifi"),new JCheckBox("GPRS"), new JCheckBox("Zigbee")}; //创建按钮数组 final JButton[] jbArray = {new JButton("ON"),new JButton("OFF")}; //设置布局管理器 for(int i=0;i<4;i++){ //设置复选按钮的大小位置 jcbArray[i].setBounds(10,185+i*30,80,30); //将复选按钮添加到JPanel中 jp1.add(jcbArray[i]); //设置标签与普通按钮的大小位置 if(i>1){ continue; } //continue后的语句不在执行。。 jlArray[i].setBounds(30,20+i*140,80,30); jbArray[i].setBounds(10,50+i*45,80,30); //将标签与普通按钮添加到JPanel中 jp1.add(jlArray[i]); jp1.add(jbArray[i]); } this.add(jp1); //为普通按钮注册动作事件监听器。 //开始按钮 **感觉这地方有问题,如何修改?????** jbArray[0].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { jbArray[0].setEnabled(jbarry); int result= JOptionPane.showConfirmDialog(null,"Start monitoring program now?","Message",JOptionPane.YES_NO_OPTION); if(result==0){ //是 StringBuffer temp0 = new StringBuffer(); for(int i = 0;i<4;i++){ if(jcbArray[i].isSelected()){ String tmpstr; tmpstr = jcbArray[i].getText()+" monitoring method "; ta.append(tmpstr + "\n"); temp0.append(tmpstr); } } if(temp0.length()==0){ JOptionPane.showMessageDialog(null,"The monitoring method can't be empty!","Message",JOptionPane.WARNING_MESSAGE); jbArray[0].setEnabled(!jbarry); } //蓝牙线程 Thread Bluetooth = new Thread(){ public void run() { if(jcbArray[0].isSelected()){ new BluetoothRemoteServer(); } } }; //Bluetooth.setName("Bluetooth"); //String name0 = Bluetooth.getName(); //ta.append(name0+" start\n"); Bluetooth.start(); //Wifi线程 Thread Wifi = new Thread(){ public void run() { if(jcbArray[1].isSelected()){ new WifiRemoteServer(); } } }; //Wifi.setName("Wifi"); // String name1 = Wifi.getName(); // ta.append(name1+" start\n"); Wifi.start(); //GPRS线程 Thread GPRS = new Thread(){ public void run() { if(jcbArray[2].isSelected()){ new GPRSRemoteServer(); } } }; //GPRS.setName("GPRS"); //String name2 = GPRS.getName(); //ta.append(name2+" start\n"); GPRS.start(); //Zigbee线程 Thread Zigbee = new Thread(){ public void run() { if(jcbArray[3].isSelected()){ new ZigbeeRemoteServer(); } } }; //Zigbee.setName("Zigbee"); //String name3 = Zigbee.getName(); //ta.append(name3+" start\n"); Zigbee.start(); } if(result==1){ //否 jbArray[0].setEnabled(!jbarry); } } }); //结束按钮 **如何实现点击jbArray[1]后能够停止前面jbArray[0]中选择的监控方式的线程?????** jbArray[1].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int result= JOptionPane.showConfirmDialog(null,"End monitoring program now?","Message",JOptionPane.YES_NO_OPTION); if(result==0){ //是 for(int i=0; i<jcbArray.length; i++){ jcbArray[i].setSelected(false); } ta.setText(null); //后续功能完善 jbArray[0].setEnabled(!jbarry); } if(result==1){ //否 } } }); } //托盘的功能选项设置 public void TrayInit(){ if(SystemTray.isSupported()){ //检查当前系统是否支持系统托盘 SystemTray tray = SystemTray.getSystemTray();//获取表示桌面托盘区的 SystemTray 实例。 URL imageUrl=SystemTrayDemo.class.getResource("java.png"); ImageIcon icon = new ImageIcon(imageUrl); //Image image = Toolkit.getDefaultToolkit().getImage("D:\\kissjava.gif"); PopupMenu popupMenu = new PopupMenu(); //为托盘添加右键菜单 MenuItem exitItem = new MenuItem("Exit"); //退出exitItem按钮 exitItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ System.exit(0); }catch(Exception ex) { ex.printStackTrace(); } } }); popupMenu.add(exitItem); //创建带指定图像、工具提示和弹出菜单的 TrayIcon trayIcon = new TrayIcon(icon.getImage(), "System is running", popupMenu); trayIcon.addMouseListener(new java.awt.event.MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2){ showIT(true); } } }); try{ tray.add(trayIcon); // 将 TrayIcon 添加到 SystemTray。 } catch (AWTException e) { System.err.println(e); } }else{ JOptionPane.showMessageDialog(null,"The operating system does not support tray","Message",JOptionPane.ERROR_MESSAGE); } } //窗体的菜单功能选项设置 public void WinInit(){ JMenuBar menubar = new JMenuBar();//为窗体添加菜单功能 setJMenuBar(menubar); //开关option选项 /*前端添加小图标 * JMenu option = new JMenu("开关"); * Icon startIcon = new ImageIcon("image/bluetooth.png"); JMenuItem start = new JMenuItem("开始",startIcon); */ //设置setting选项 JMenu setting = new JMenu("Setting"); JMenu language = new JMenu("Language"); setting.add(language); JMenuItem language1 = new JMenuItem("中文"); language.add(language1); JMenuItem language2 = new JMenuItem("English"); language.addSeparator(); language.add(language2); JMenu update = new JMenu("Update"); setting.addSeparator(); setting.add(update); JMenuItem update1 = new JMenuItem("Version update"); update.add(update1); update1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null,"please send the mail to zhouwenquan2012552061@Gmail.com","Message",JOptionPane.PLAIN_MESSAGE); } }); //关于help选项 JMenu help = new JMenu("Help"); JMenuItem about = new JMenuItem("About"); help.add(about); //后续功能完善 about.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null," Copyright @2013 popcorn\n All Right Reserved\n author popcorn\n version 1.0","Message",JOptionPane.PLAIN_MESSAGE); } }); menubar.add(setting); menubar.add(help); } /** 该方法用于实现滚动以及光标相关效果 */ public void scrollAndSetCursor(){ // ta.requestFocus(); ta.setSelectionStart(ta.getText().length()); } public void showIT(boolean visable){ if(this.isVisible() != visable) this.setVisible(visable); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable(){ public void run(){ new SystemTrayDemo().setVisible(true);//设置窗体显示 } }); } }
JAVA组件重画问题,怎样让特定的组件重画而不影响其他的组件
![图片说明](https://img-ask.csdn.net/upload/201612/18/1482070741_147092.png) 我的窗口组件大致是这样构成的,现在的情况是JPanel2-2所重画的动画显示完全,但是JButton同时也在不停的重画,导致JButton按下的效果显示不出来(一按下就重画恢复),想问一下怎么改变就能让多个组件分别重画各自组件互不影响?
java多线程的程序设计
阅读和修改一个球的代码程序,完成多球的功能: Write a program that bounces balls inside a panel.The ball should begin moving with a mousePressed event. When user clocks the mouse, a ball should be added. When balls hits the edge of the panel,it should bounde off the edge and continue in the opposite direction. The ball location should be updated using Runnable. GUI as follows:![图片说明](https://img-ask.csdn.net/upload/201805/22/1526957953_416827.png) 程序如下: import java.util.Random; public class Ball implements Runnable { private int x; // horizontal position of ball private int y; // vertical position of ball private int dx; // change in horizontal position of ball private int dy; // change in vertical position of ball private final int MAX_X = 200; // horizontal edge of JPanel private final int MAX_Y = 200; // vertical edge of JPanel private static final Random generator = new Random(); public Ball(int xPos, int yPos) { dx = generator.nextInt(5) + 1; // change in x (1-5 pixels) dy = generator.nextInt(5) + 1; // change in y (1-5 pixels) x = xPos; // set ball to horizontal position of mouse press y = yPos; // set ball to vertical position of mouse press } // bounces ball perpetually until window is closed public void run() { while (true) {// infinite loop { try { Thread.sleep(20); // sleep for 20 milliseconds } // process InterruptedException during sleep catch (InterruptedException exception) { exception.printStackTrace(); } x += dx; // determine new x-position y += dy; // determine new y-position // if bounce off top or bottom of JPanel if (y <= 0 || y >= MAX_Y - 10) { dy = -dy; // reverse velocity in y direction } // if bounce off left or right of JPanel if (x <= 0 || x >= MAX_X - 10) { dx = -dx; // reverse velocity in x direction } } } // get horizontal position of ball public int getX() { return x; // return x value } // get vertical position of ball public int getY() { return y; // return y value } } import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseAdapter; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.swing.JPanel; import javax.swing.JFrame; public class BallPanel extends JPanel { private Ball blueBall; // bouncing ball private ExecutorService threadExecutor; // for running Ball runnable private JFrame parentWindow; // parent window of JPanel private final int MAX_X = 200; // horizontal edge of JPanel private final int MAX_Y = 200; // vertical edge of JPanel public BallPanel(JFrame window) { parentWindow = window; // set parent window of JPanel // create ExecutorService for running ball runnable threadExecutor = Executors.newCachedThreadPool(); // anonymous inner class handles mouse events this.addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent event) { createBall(event); // delegate call to ball starter RepaintTimer timer = new RepaintTimer(parentWindow); threadExecutor.execute(timer); } } ); } // create a ball if no ball exists and set it in motion private void createBall(MouseEvent event) { if (blueBall == null) {// if no ball exists { int x = event.getX(); // get x position of mouse press int y = event.getY(); // get y position of mouse press blueBall = new Ball(x, y); // create new ball threadExecutor.execute(blueBall); // set ball in motion } } // return minimum size of animation public Dimension getMinimumSize() { return getPreferredSize(); } // return preferred size of animation public Dimension getPreferredSize() { return new Dimension(MAX_X, MAX_Y); } // draw ball at current position public void paintComponent(Graphics g) { super.paintComponent(g); if (blueBall != null) {// if ball exists { g.setColor(Color.blue); // set color to blue g.fillOval(blueBall.getX(), blueBall.getY(), 10, 10); // draws } } } import javax.swing.JFrame; public class BouncingBall extends JFrame { private final BallPanel ballCanvas; // JPanel in which ball bounces public BouncingBall() { ballCanvas = new BallPanel(this); // create new BallPanel add(ballCanvas); // add BallPanel to JFrame pack(); // make window just large enough for its GUI setVisible(true); // show window } public static void main(String args[]) { BouncingBall application = new BouncingBall(); application.setDefaultCloseOperation(EXIT_ON_CLOSE); } } import javax.swing.JFrame; public class RepaintTimer implements Runnable { private final JFrame repaintComponent; public RepaintTimer(JFrame frame) { // specify component to be repainted repaintComponent = frame; } public void run() { while (true) { try { Thread.sleep(20); } catch (InterruptedException ex) { ex.printStackTrace(); } repaintComponent.repaint(); // repaint the component } } }
JAVA网络编程服务器多线程接受套接字,如何能使服务器的静态常量,与客户端的数据进行同步?
服务器Server 客户端CLient Server静态常量num 创建服务器,ServerSocket的端口号为8000,连接套接字。 每创建一个客户端,客户端就创建一个Socket,端口号为8000,与服务器进行连接,与此同时,客户端新建ServerSocket,端口号为3000+Server.num,连接套接字。 服务器与客户端连接后,服务器新建子线程Handler。 子线程Handler,新建ServerSocket,端口号为2000+Server.num,连接套接字。 每当有一个子线程创建,主线程都会加入一个子线程创建的对话界面(显示框,输入框,发送按钮)的选项卡 每当创建一个客户端,客户端都会创建一个对话界面 点击发送时,Hanlder会创建Socket,端口号为3000+Server.num。客户端会创建Socket,端口号为2000+Server.num 这是前提,现在我运行程序,但是当我每当创建一个客户端时,Server.num都不会改变,不知道怎么回事,急求大神解答,感激不尽! 以下是源代码,这里我讲Server.num抽离出去单独做成一个类NUM,每次Handler创建后,调用该类的增加函数numAdd(): 服务器代码: package NewPackage; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class Server { private ServerSocket serverSocket; private int PORT = 8000; private Thread workThread; private static MyServer server; public static ArrayList<Socket> solist = new ArrayList<Socket>(); public static ArrayList<MyClient> ctlist = new ArrayList<MyClient>(); public Server() throws Exception { serverSocket = new ServerSocket(PORT); } public void service() { while (true) { Socket socket = null; try { String s; int num = NUM.num; NUM.numadd(); socket = serverSocket.accept(); System.out.println(num + 2000); workThread = new Thread(new Handler(num + 2000, MyServer.jp)); workThread.start(); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String args[]) throws Exception { server = new MyServer(); server.CreateGUI(); new Server().service(); } } 服务器的界面代码: package NewPackage; import java.awt.BorderLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.OutputStream; import java.io.PrintStream; import java.net.Socket; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextArea; public class MyServer extends JFrame { private static final long serialVersionUID = 1L; static JTextArea contentjta; static JScrollPane contentscroll; static JTextArea inputjta; static JScrollPane inputscroll; static JButton button; static JPanel jpanel; static JTabbedPane jp; MyServer() { super("Server Window"); } void CreateGUI() { jp = new JTabbedPane(); this.add(jp, BorderLayout.CENTER); // 将选项卡窗体添加到 主窗体上去 this.setSize(400, 400); this.setLocation(400, 200); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } 子线程Handler package NewPackage; import java.awt.BorderLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextArea; public class Handler implements Runnable, ActionListener { private Socket socket; private PrintWriter pw; private int order; private ServerSocket svs; private MyClient client; static JTextArea contentjta; static JScrollPane contentscroll; static JTextArea inputjta; static JScrollPane inputscroll; static JButton button; static JPanel jpanel; static JTabbedPane jp; private BufferedReader br; public Handler(int n, JTabbedPane jp) { try { this.jp = jp; // this.socket = socket; // System.out.println("handler" + socket.getLocalPort()); order = n ; // JOptionPane.showInputDialog(this, order); System.out.println("Handler" + order); svs = new ServerSocket(order + 1000); createTab(); } catch (Exception e) { e.printStackTrace(); } } private PrintWriter getWriter(Socket socket) throws IOException { OutputStream socketOut = socket.getOutputStream(); return new PrintWriter(socketOut, true); } private BufferedReader getReader(Socket socket) throws IOException { InputStream socketln = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketln)); } void createTab() { JPanel chat = new JPanel(new BorderLayout()); contentjta = new JTextArea(10, 30); contentjta.setTabSize(4); contentjta.setFont(new Font("楷体", Font.BOLD, 16)); contentjta.setEditable(false); inputjta = new JTextArea(10, 30); inputjta.setTabSize(4); inputjta.setFont(new Font("楷体", Font.BOLD, 16)); inputjta.setEditable(true); contentscroll = new JScrollPane(contentjta); contentscroll .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); contentscroll .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); inputscroll = new JScrollPane(inputjta); inputscroll .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); inputscroll .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jpanel = new JPanel(); button = new JButton("发送"); button.addActionListener(this); jpanel.setLayout(new GridLayout(1, 1)); jpanel.add(button); chat.add(contentscroll, BorderLayout.NORTH); chat.add(inputscroll, BorderLayout.CENTER); chat.add(jpanel, BorderLayout.SOUTH); jp.add("aa", chat); jp.setFont(new Font("宋体", Font.BOLD, 20)); } public void run() { try { // 接受信息 while (true) { Socket socket = svs.accept(); br = getReader(socket); pw = getWriter(socket); String msg = null; String s = ""; while ((msg = br.readLine()) != null) { s += msg; if ((msg.equals("bye"))) break; } contentjta.setText(s); } } catch (Exception e) { e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); if (o == button) { try { Socket so = new Socket("localhost", order); OutputStream out = so.getOutputStream(); PrintStream pout = new PrintStream(out); pout.print(inputjta.getText()); inputjta.setText(""); out.flush(); out.close(); } catch (Exception ex) { ex.printStackTrace(); } } } }
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(); } }
能不能在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) ```
java.sql.SQLException错误
运行StuDialog.class出现下面错误提示,初学Java请求帮助找出下面是什么原因? java.sql.SQLException: No value specified for parameter 2 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929) at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2560) at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2536) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2383) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2327) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2312) at com.studentmanager.StuAddDialog.actionPerformed(StuAddDialog.java:109) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6216) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5981) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4583) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4413) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4413) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178) at java.awt.Dialog$1.run(Dialog.java:1051) at java.awt.Dialog$3.run(Dialog.java:1103) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Dialog.show(Dialog.java:1101) at java.awt.Component.show(Component.java:1516) at java.awt.Component.setVisible(Component.java:1468) at java.awt.Window.setVisible(Window.java:841) at java.awt.Dialog.setVisible(Dialog.java:991) at com.studentmanager.StuAddDialog.<init>(StuAddDialog.java:73) at com.studentmanager.StuDialog.actionPerformed(StuDialog.java:109) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6216) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5981) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4583) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4413) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4413) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 1、StuDialog.class如下: package com.studentmanager; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Vector; public class StuDialog extends JFrame implements ActionListener{ //定义一些控件 JPanel jp1,jp2; JLabel jl1; JButton jb1,jb2,jb3,jb4; JTable jt; JScrollPane jsp; JTextField jtf; public static void main(String[] args) { // TODO Auto-generated method stub StuDialog stuDialog=new StuDialog(); } public StuDialog() { jp1=new JPanel(); jtf=new JTextField(10); jb1=new JButton("查询"); jb1.addActionListener(this); jl1=new JLabel("请输入名字"); //把各个控件加入到jp1 jp1.add(jl1); jp1.add(jtf); jp1.add(jb1); jp2=new JPanel(); jb2=new JButton("添加"); jb2.addActionListener(this); jb3=new JButton("修改"); jb4=new JButton("删除"); //把各个按钮就加入到jp2 jp2.add(jb2); jp2.add(jb3); jp2.add(jb4); /*//rowData可以存放多行 Vector hang=new Vector(); hang.add("sp001"); hang.add("孙悟空"); hang.add("男"); hang.add("25"); hang.add("火锅山"); hang.add("少林派"); //加入到rowData rowData.add(hang);*/ //创建一个数据模型对象 StuModel sm=new StuModel(); //初始化JTable jt=new JTable(sm); //初始化Jsp JScrollPane jsp=new JScrollPane(jt); //把jsp放入JFrame this.add(jsp); this.add(jp1,"North"); this.add(jp2,"South"); this.setSize(400,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //判断是哪个按钮被点击 if(e.getSource()==jb1) { System.out.println("用户想查询"); //因为把表的现实的数据封装到StuModel中,那么我们就可以 //简单完成查询 //查询数据库,更新JTable String name=this.jtf.getText().trim(); //写一个SQL语句 String sql="select * from stu where stuName='"+name+"'"; //构建新的数据模型,并更新 StuModel sm=new StuModel(sql); //更新JTable jt.setModel(sm); //当用户点击添加 } else if(e.getSource()==jb2) { StuAddDialog sa=new StuAddDialog(this,"添加学生",true); //重新再获得新的数据模型 } } } 2、StuAddDialog.class如下: package com.studentmanager; import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; import javax.swing.JDialog; import java.sql.*; public class StuAddDialog extends JDialog implements ActionListener { //定义我需要的swing控件 JPanel jp1,jp2,jp3; JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6; JButton jb1,jb2; JLabel jl1,jl2,jl3,jl4,jl5,jl6; //owner 它的父窗口 //title窗口名 //model指定是模式窗口,还是非模式窗口 public StuAddDialog(Frame owner,String title,boolean modal) { super(owner,title,modal);//调用父类构造方法,达到模式对话框效果 jl1=new JLabel("学号"); jl2=new JLabel("姓名"); jl3=new JLabel("性别"); jl4=new JLabel("年龄"); jl5=new JLabel("籍贯"); jl6=new JLabel("系别"); jtf1=new JTextField(); jtf2=new JTextField(); jtf3=new JTextField(); jtf4=new JTextField(); jtf5=new JTextField(); jtf6=new JTextField(); jb1=new JButton("添加"); jb1.addActionListener(this); jb2=new JButton("取消"); jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel(); //设置布局 jp1.setLayout(new GridLayout(6,1)); jp2.setLayout(new GridLayout(6,1)); jp1.add(jl1); jp1.add(jl2); jp1.add(jl3); jp1.add(jl4); jp1.add(jl5); jp1.add(jl6); jp2.add(jtf1); jp2.add(jtf2); jp2.add(jtf3); jp2.add(jtf4); jp2.add(jtf5); jp2.add(jtf6); jp3.add(jb1); jp3.add(jb2); this.add(jp1,BorderLayout.WEST); this.add(jp2,BorderLayout.CENTER); this.add(jp3,BorderLayout.SOUTH); jb1.addActionListener(this); //展现 this.setSize(300,250); //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jb1) { //对用户点击添加按钮后的响应动作 //连接数据库 Connection ct=null; Statement stmt=null; ResultSet rs=null; PreparedStatement psmt=null; //连接数据库,判断用户是否合法 try{ //1加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2创建连接对象,注册驱动程序并打开连接对象 ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=GBK","root","123456"); psmt=ct.prepareStatement("select * from stu"); //3获取语句对象 //stmt=ct.createStatement(); //与编译语句对象 psmt=ct.prepareStatement("insert into stu values(?,?,?,?,?,?)"); //给参数赋值 psmt.setString(1,jtf1.getText()); psmt.setString(1,jtf2.getText()); psmt.setString(1,jtf3.getText()); psmt.setString(1,jtf4.getText()); psmt.setString(1,jtf5.getText()); psmt.setString(1,jtf6.getText()); //4执行操作 psmt.executeUpdate(); this.dispose();//关闭对话框 }catch(ClassNotFoundException e1) { e1.printStackTrace(); }catch(SQLException e2) { e2.printStackTrace(); } finally { //释放语句对象,连接对象 try { if(rs!=null) rs.close(); if(stmt!=null) stmt.close(); if(ct!=null) ct.close(); }catch(Exception e2) { e2.printStackTrace(); } } } } @Override public Container getContentPane() { // TODO Auto-generated method stub return super.getContentPane(); } @Override public void setContentPane(Container contentPane) { // TODO Auto-generated method stub super.setContentPane(contentPane); } }
关于使用DocumentListener监听报错的问题,请高手指教
我是java新手,自学java。用java写一个JFrame的窗口,能够读取本地电脑上的文件。设置一个JTextArea文本域,用于显示读取的文件的内容。窗口下方有三个按钮(JButton),分别为“打开”、“保存”、“另存为”。打开窗口时,默认“打开”按钮可以点击,其他两个按钮不能点击。当读取文件到JTextArea文本区后,“保存”按钮激活,可以点击。我用下面的代码实现。其中DocumentListener我用两种方式实现:一种是直接在 JFrameTransFile类中实现,在该类内部调用,这种方式是可以修改JButton按钮是否激活属性的;另一种是另外写一个类Swing_OnValueChanged实现DocumentListener接口,在JFrameTransFile类中设置文本区(JTextArea)监听(代码中** **部分),调用Swing_OnValueChanged,此时会报错(报错信息附在代码后面),是在Swing_OnValueChanged类中insertUpdate()方法中修改JFrameTransFile类中的jbutton2的属性是报错的。请高手指教,如果我想在文本区变化时,调用Swing_OnValueChanged类修改JFrameTransFile类中JButton的setEnable属性,该怎么修改代码?在此先谢谢各位大侠了。 以下为部分主要代码: package demo.java.transfile; import java.awt.*; import java.io.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.Document; public class JFrameTransFile extends WindowAdapter implements ActionListener,TextListener,DocumentListener { JFrame jf;//框架变量 JTextArea jtextarea1;//多行文本区 JPanel jp1; JTextField jtextfield1;//单行文本框 JScrollPane jscrollpane1; JButton jbutton1,jbutton2,jbutton3;//按钮 FileDialog filedialog1;//文件对话框 File file1=null;//文件对象初始化为空值 public void display() {//设置界面与监听 jf=new JFrame("坐标转换"); jf.setSize(680,400); jf.addWindowListener(this); ......... ......... //定义监听 DocumentListener sovc=new Swing_OnValueChanged(); //设置滚动条 jscrollpane1=new JScrollPane(); jf.add(jscrollpane1); //添加文本区 jtextarea1=new JTextArea(); jtextarea1.setEnabled(false); jscrollpane1.setViewportView(jtextarea1); **//添加文本区监听(调用另外的类中实现的DocumentListener)** **jtextarea1.getDocument().addDocumentListener(sovc);** **//添加文本区监听(调用另外的类中实现的DocumentListener)** **//jtextarea1.getDocument().addDocumentListener(this);** //面板与布局 jp1=new JPanel(); jp1.setLayout(new FlowLayout(FlowLayout.LEFT)); jbutton1=new JButton("打开"); jbutton2=new JButton("保存"); jbutton3=new JButton("另存为"); jp1.add(jbutton1); jp1.add(jbutton2); jp1.add(jbutton3); jbutton2.setEnabled(false); jbutton3.setEnabled(false); jbutton1.addActionListener(this); jbutton2.addActionListener(this); jbutton3.addActionListener(this); jf.add(jp1,"South"); jf.setVisible(true); } public void textValueChanged(TextEvent e) {} public void actionPerformed(ActionEvent e) { if(e.getSource()==jbutton1) { //创建并打开文件对话框 filedialog1=new FileDialog(jf,"打开",FileDialog.LOAD); filedialog1.setVisible(true); if((filedialog1.getDirectory()!=null)&&(filedialog1.getFile()!=null)) { jtextfield1.setText(filedialog1.getDirectory()+filedialog1.getFile()); try { //为文件对象赋值 file1=new File(filedialog1.getDirectory(),filedialog1.getFile()); //文件读入通道连向文件 FileReader fr=new FileReader(file1); //定义文件缓冲区 BufferedReader br=new BufferedReader(fr); String line; //按行读取文本,每行附加在多行文本区之后 while((line=br.readLine())!=null) { jtextarea1.append(line.trim()+"\r\n"); } fr.close(); br.close(); } catch(IOException ioe) { System.out.println(ioe); } } } } public void changedUpdate(DocumentEvent e) {} public void insertUpdate(DocumentEvent e) { jbutton2.setEnabled(true); } public void removeUpdate(DocumentEvent e) { } public static void main(String[] args) { new JFrameTransFile().display(); } } class Swing_OnValueChanged implements DocumentListener { JFrameTransFile jftf=new JFrameTransFile(); public void changedUpdate(DocumentEvent e) {} public void insertUpdate(DocumentEvent e) { jftf.jbutton2.setEnabled(true); } public void removeUpdate(DocumentEvent e) {} } 以下部分为点击“打开”按钮时的报错 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at demo.java.transfile.Swing_OnValueChanged.insertUpdate(JFrameTransFile.java:150) at javax.swing.text.AbstractDocument.fireInsertUpdate(Unknown Source) at javax.swing.text.AbstractDocument.handleInsertString(Unknown Source) at javax.swing.text.AbstractDocument.insertString(Unknown Source) at javax.swing.text.PlainDocument.insertString(Unknown Source) at javax.swing.JTextArea.append(Unknown Source) at demo.java.transfile.JFrameTransFile.actionPerformed(JFrameTransFile.java:107) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$000(Unknown Source) at java.awt.EventQueue$1.run(Unknown Source) at java.awt.EventQueue$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$2.run(Unknown Source) at java.awt.EventQueue$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
关于java截图画线的问题 求大神帮忙
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; /** * 用Java模拟出QQ桌面截图功能 * @author 五斗米 <如转载请保留作者和出处> * @blog http://blog.csdn.net/mq612 */ public class Test extends JFrame { private static final long serialVersionUID = -267804510087895906L; private JButton button = null; private JLabel imgLabel = null; public Test() { button = new JButton("模拟屏幕(点右键退出)"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { new ScreenWindow(imgLabel); } catch (Exception e1) { JOptionPane.showConfirmDialog(null, "出现意外错误!", "系统提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE); } } }); JPanel pane = new JPanel(); pane.setBackground(Color.WHITE); imgLabel = new JLabel(); pane.add(imgLabel); JScrollPane spane = new JScrollPane(pane); this.getContentPane().add(button, BorderLayout.NORTH);//把按钮设置在平面区域的上方(北方) this.getContentPane().add(spane); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(300, 200); this.setLocationRelativeTo(null); this.setVisible(true); } public static void main(String[] args) { new Test(); } } class ScreenWindow extends JFrame { private static final long serialVersionUID = -3758062802950480258L; private boolean isDrag = false; private int x = 0; private int y = 0; private int xEnd = 0; private int yEnd = 0; public ScreenWindow(final JLabel imgLabel) throws AWTException, InterruptedException { Dimension screenDims = Toolkit.getDefaultToolkit().getScreenSize(); JLabel label = new JLabel(new ImageIcon(ScreenImage.getScreenImage(0, 0, screenDims.width, screenDims.height))); label.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); label.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) { dispose(); } } public void mousePressed(MouseEvent e) { //System.out.println("鼠标按下了开始"); x = e.getX(); y = e.getY(); } public void mouseReleased(MouseEvent e) { //System.out.println(isDrag+"鼠标释放了开始执行"); if (isDrag) { xEnd = e.getX(); yEnd = e.getY(); if(x > xEnd){ int temp = x; x = xEnd; xEnd = temp; } if(y > yEnd){ int temp = y; y = yEnd; yEnd = temp; } try { Graphics g = getGraphics(); g.setColor(Color.BLUE); g.drawRect(x, y, xEnd-x, yEnd-y); g.drawLine(xEnd,y,xEnd,yEnd); g.drawLine(x,yEnd,xEnd,yEnd); g.drawLine(x,y,xEnd,y); g.drawLine(x,y,x,yEnd); imgLabel.setIcon(new ImageIcon(ScreenImage.getScreenImage(x, y, xEnd - x, yEnd - y))); } catch (Exception ex) { JOptionPane.showConfirmDialog(null, "出现意外错误!", "系统提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE); } dispose(); } } }); label.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) { //System.out.println("鼠标开始拖动了:"+isDrag); if(!isDrag) isDrag = true; xEnd=e.getX(); yEnd=e.getY(); //画线之前清理原来的线条 Graphics g = getGraphics(); g.setColor(Color.red); //repaint(); //画线 g.drawLine(xEnd,y,xEnd,yEnd); g.drawLine(x,yEnd,xEnd,yEnd); g.drawLine(x,y,xEnd,y); g.drawLine(x,y,x,yEnd); } }); this.setUndecorated(true); this.getContentPane().add(label); this.setSize(screenDims.width, screenDims.height); this.setVisible(true); this.setExtendedState(JFrame.MAXIMIZED_BOTH); } } class ScreenImage { public static Image getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException { Robot robot = new Robot(); Image screen = robot.createScreenCapture(new Rectangle(x, y, w, h)).getScaledInstance(w, h, Image.SCALE_SMOOTH); MediaTracker tracker = new MediaTracker(new Label()); tracker.addImage(screen, 1); tracker.waitForID(0); return screen; } } 本人是个刚入行的初级java程序员,自己在网上找了个模拟qq截图的练习,代码如上,可是当实现截图的轮廓线时,mouseDragged()方法中的画线多次执行,导致截图出现很多无用的线条,用了repaint()也不好使。各位大神,我刚入行,不要取笑我。谢谢各位了!
java编的音乐播放器,只能播放部分MP3文件
import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.SourceDataLine; public class Player { private String path;//文件路径 private String name;//文件名称 private AudioFormat audioFormat;//播放格式 private AudioInputStream audioInputStream;//音乐播放输入流 private SourceDataLine sourceDataLine;// 播放设备 private boolean isStop = false;// 播放停止标志 /** * 创建对象时需要传入播放路径及文件名称 * @param path * @param name */ public Player(String path ,String name) { this.path = path; this.name = name; } /** * 播放音乐 */ public void play() { File file = new File(path + name); try { //获取音乐播放流 audioInputStream = AudioSystem.getAudioInputStream(file); //获取播放格式 audioFormat = audioInputStream.getFormat(); /*System.out.println("取样率:"+ audioFormat.getSampleRate()); Map map = audioFormat.properties(); Iterator it = map.entrySet().iterator(); while(it.hasNext()) { Map.Entry m = (Entry) it.next(); System.out.println(m.getKey()+":"+m.getValue()); }*/ //其它格式音乐文件处理 if(audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) { audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, audioFormat.getSampleRate(), 16, audioFormat.getChannels(), audioFormat.getChannels()*2, audioFormat.getSampleRate(), audioFormat.isBigEndian()); audioInputStream = AudioSystem.getAudioInputStream(audioFormat, audioInputStream); } //打开输出设备 DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat,AudioSystem.NOT_SPECIFIED); sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); sourceDataLine.open(audioFormat); sourceDataLine.start(); //启动播放线程 new Thread() { @Override public void run() { try { int n = 0; byte tempBuffer[] = new byte[320]; while(n != -1) { //停止播放入口,如果isStop被置为真,结束播放 if(isStop) break; //将音乐输入流的数据读入tempBuffer缓存 n = audioInputStream.read(tempBuffer,0 , tempBuffer.length); if(n>0) { //将缓存数据写入播放设备,开始播放 sourceDataLine.write(tempBuffer, 0, n); } } audioInputStream.close(); sourceDataLine.drain(); sourceDataLine.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(); } } }.start(); } catch (Exception e) { e.printStackTrace(); System.exit(0); throw new RuntimeException(); } } /** * 停止播放 */ public void stop() { try { isStop = true; audioInputStream.close(); sourceDataLine.drain(); sourceDataLine.close(); } catch (IOException e) { e.printStackTrace(); } } } import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.Vector; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.DefaultTableModel; import com.zy.play.Player; public class MusicPanel extends JFrame{ private JButton add, playbtn, stopbtn, deletebtn, deleteAllbtn, upbtn, downbtn;//播放、停止、删除、删除全部、向上。向下按钮 private JTable table; //歌曲信息表 private Player player; private JPanel jpl1,jpl2; public MusicPanel() { initCompont(); } /** * 初始化界面 */ private void initCompont() { //各个按钮赋初始值 add = new JButton("导入"); playbtn = new JButton("试听"); stopbtn = new JButton("停止"); deletebtn = new JButton("单曲删除"); deleteAllbtn = new JButton("全部删除"); upbtn = new JButton("上一首"); downbtn = new JButton("下一首"); //导入按钮点击设置 add.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { addFile(); } }); //试听按钮点击设置 playbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(player!=null) { player.stop(); player = null; } int rowNum = table.getSelectedRow(); if(rowNum != -1) { player = new Player((String)table.getValueAt(rowNum, 1) + "\\" ,(String)table.getValueAt(rowNum, 0)); System.out.println((String)table.getValueAt(rowNum, 1)+"\\"+(String)table.getValueAt(rowNum, 0)); player.play(); } } }); //停止按钮点击设置 stopbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(player != null) { player.stop(); player = null; } } }); //单曲删除按钮点击设置 deletebtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int rowNum = table.getSelectedRow(); if(rowNum != -1) { ((DefaultTableModel)table.getModel()).removeRow(rowNum); } } }); //删除全部按钮点击设置 deleteAllbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for(int i = table.getRowCount()-1; i>=0; i--) { ((DefaultTableModel)table.getModel()).removeRow(i); } } }); downbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int n = table.getSelectedRow() + 1; if(n < table.getRowCount()) { table.setRowSelectionInterval(n, n); } } }); upbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int n = table.getSelectedRow() - 1; if(n < -1) { n = table.getRowCount() - 1; } if(n >= 0) { table.setRowSelectionInterval(n, n); } } }); //添加各个按钮 jpl1= new JPanel(new GridLayout(1,7)); jpl1.add(add); jpl1.add(playbtn); jpl1.add(stopbtn); jpl1.add(deletebtn); jpl1.add(deleteAllbtn); jpl1.add(upbtn); jpl1.add(downbtn); //this.setLayout(new BorderLayout()); this.add(jpl1,"North"); Vector<String> tableContent = new Vector<String>(); //表格内容 Vector<String> columnName = new Vector<String>();//歌曲信息表格列名称 columnName.add("歌曲名称"); columnName.add("存放路径"); //设置table table = new JTable(tableContent, columnName); table.setSelectionBackground(Color.blue); table.setSelectionForeground(Color.LIGHT_GRAY); jpl2=new JPanel(); jpl2.add(new JScrollPane(table), BorderLayout.CENTER); this.add(jpl2,"Center"); this.setSize(650, 210); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** * 添加文件 */ private void addFile() { JFileChooser fc = new JFileChooser(); //设置选入文件类型 FileNameExtensionFilter filter = new FileNameExtensionFilter("mp3 or wav file", "mp3","wav","MP3","WAV"); fc.setFileFilter(filter); fc.setFileSelectionMode(JFileChooser.FILES_ONLY);//设置只选择文件 fc.setMultiSelectionEnabled(true);//设置选择多个文件 int intRetVal = fc.showDialog(this, "打开"); //获取文件并添加到table if(intRetVal == JFileChooser.APPROVE_OPTION) { File[] file = fc.getSelectedFiles(); String name; for(File var : file) { name = var.getName().toLowerCase(); if( name.endsWith(".mp3")|| name.endsWith(".wav")) { this.addMusicItem(var.getName() , var.getParentFile().getAbsolutePath()); } } } } /** * table的行中添加音乐文件名称name,音乐文件路径path * @param name * @param path */ private void addMusicItem(String name, String path ) { Vector<String> rowData = new Vector<String>(); rowData.add(name); rowData.add(path); //rowData.add(time); DefaultTableModel tabMod= (DefaultTableModel) table.getModel(); tabMod.addRow(rowData); } public static void main(String[] args) { MusicPanel test=new MusicPanel(); } } ``` ``` 报错:java.io.IOException: Resetting to invalid mark
请问如何点击按钮就可以弹出图片?
``` import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.*; import java.awt.Image; //让GUI继承Icon可以画图 public class GUI implements Icon{ static JButton Button1 = new JButton("父亲"); static JButton Button2 = new JButton("母亲"); static JButton Button3 = new JButton("儿子"); static JButton Button4 = new JButton("女儿"); static JButton Button5 = new JButton("姐姐"); static JButton Button6 = new JButton("妹妹"); static JButton Button7 = new JButton("哥哥"); static JButton Button8 = new JButton("弟弟"); static JButton Button9 = new JButton("老婆"); static JButton Button10 = new JButton("删除"); static JButton Button11 = new JButton("清空"); static JButton Button12 = new JButton("等于"); static JTextField txt =new JTextField("",10); static String[] str = new String[15]; static int i = 0; //写死一个标签,用来存放图片,写了再说管这么多 static JLabel label; private ImageIcon father = new ImageIcon ("D:\\图片\\亲属计算器图片\\大耳朵图图\\爸爸.jpg"); // JDialog txt1 =new JDialog(); public static void main(String[] args) { JFrame frame = new JFrame("亲戚计算器"); /* final Box base = Box.createVerticalBox(); final Box box1 = Box.createHorizontalBox(); final Box box2 = Box.createHorizontalBox(); //在这里先导入图片 ImageIcon image_father = new ImageIcon("D:\\图片\\亲属计算器图片\\大耳朵图图\\爸爸.jpg"); image_father.setImage(image_father.getImage().getScaledInstance(100, 200, 70)); Button1.setIcon(image_father);*/ // box1.add(Button1); // base.add(box1); // frame.add(base); /* 思路,先添加一块区域,可以用来显示图片,再在此基础上添加响应事件 其实就是Label*/ frame.setBounds(600,260,1000,1000); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel outLabel = new JLabel(); //frame.add(father); JPanel panel = new JPanel(); frame.add(panel); panel.setLayout(null); placeComponents(panel); new GUI(panel); System.out.println(str[0]); //这里其实只监听了文本,并且只能够监听文本 MyActionListener1 myActionListener1 = new MyActionListener1(txt,outLabel); MyActionListener2 myActionListener2 = new MyActionListener2(txt); MyActionListener3 myActionListener3 = new MyActionListener3(txt); MyActionListener4 myActionListener4 = new MyActionListener4(txt); Button1.addActionListener(myActionListener1); Button2.addActionListener(myActionListener1); Button3.addActionListener(myActionListener1); Button4.addActionListener(myActionListener1); Button5.addActionListener(myActionListener1); Button6.addActionListener(myActionListener1); Button7.addActionListener(myActionListener1); Button8.addActionListener(myActionListener1); Button9.addActionListener(myActionListener1); Button10.addActionListener(myActionListener2); Button11.addActionListener(myActionListener3); Button12.addActionListener(myActionListener4); frame.setVisible(true); } private static void placeComponents(JPanel panel) { // TODO Auto-generated method stub } public GUI(JPanel panel) { txt.setBounds(10,10, 200, 36); panel.add(txt); Button1.setBounds(30, 150, 80, 50); panel.add(Button1); Button2.setBounds(110, 150, 80, 50); panel.add(Button2); Button3.setBounds(190, 150, 80, 50); panel.add(Button3); Button4.setBounds(30, 200, 80, 50); panel.add(Button4); Button5.setBounds(110, 200, 80, 50); panel.add(Button5); Button6.setBounds(190, 200, 80, 50); panel.add(Button6); Button7.setBounds(30, 250, 80, 50); panel.add(Button7); Button8.setBounds(110, 250, 80, 50); panel.add(Button8); Button9.setBounds(190, 250, 80, 50); panel.add(Button9); Button10.setBounds(400, 150, 80, 50); panel.add(Button10); Button11.setBounds(400, 200, 80, 50); panel.add(Button11); Button12.setBounds(400, 250, 80, 50); panel.add(Button12); //与文本类似,这里放了一个标签,可以用来准备显示图片 // Button1.setBounds(400, 150, 80, 50); // panel.add(Button10); } } /*class MyActionListener0 implements ActionListener{//按键后显示相应的图片 private JImageField imageField; }*/ class MyActionListener1 implements ActionListener{//按键后文本框显示,获取相应文本及图片 //即需要定义一个图片区域,并且需要判断这个文字对应的图片 //这才是关键的监听代码的区域 private JTextField textField; public MyActionListener1(JTextField txt, JLabel label) { super(); this.textField = txt; } //每按一次按钮,此方法都会自动调用一次 public void actionPerformed(ActionEvent e) {//名称按键 // TODO Auto-generated method stub textField.setText(textField.getText()+e.getActionCommand()+"的"); GUI.str[GUI.i] = e.getActionCommand().substring(0,2); GUI.i++; //System.out.println(Arrays.toString(GUI.str)); //System.out.println(textField.getText()+e.getActionCommand()+"的"); } } class MyActionListener2 implements ActionListener{//删除方法 private JTextField textField; public MyActionListener2(JTextField txt) { super(); this.textField = txt; } public void actionPerformed(ActionEvent e) { textField.setText(textField.getText().substring(0, textField.getText().length()-3)); GUI.str[GUI.i] = null; GUI.i--; } } class MyActionListener3 implements ActionListener{//清空按键 private JTextField textField; public MyActionListener3(JTextField txt) { super(); this.textField = txt; } public void actionPerformed(ActionEvent e) { textField.setText(textField.getText().substring(0, 0)); for (int i = 0; i <= GUI.i; i++) { GUI.str[i] = null; } GUI.i = 0; } } class MyActionListener4 implements ActionListener{//计算按键 private JTextField textField; public MyActionListener4(JTextField txt) { super(); this.textField = txt; } public void actionPerformed(ActionEvent e) { Jisuanqi jsp = new Jisuanqi(); textField.setText(jsp.jisaunmian(GUI.str, "y")); for (int i = 0; i <= GUI.i; i++) { GUI.str[i] = null; } GUI.i = 0; } } ``` 这是部分代码,运行不出来,因为少了其它的配合的类,主要是要在MyActionListener1中添加一些代码,使得点击Button1-9不仅可以弹出文字,还可以弹出图片。
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问