Java中在使用addMouseListener函数时建立 new MouseListener报错

我是一名大二学生,最近在学习Java中GUI相关内容时,用到了addMouseListener函数,但在建立new MouseListener时却报错了,但代码和书上一样,并且在室友电脑上也可以正常运行,请求各位前辈帮忙看一看,图片说明
具体代码如下:

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

public class MouseEvent {
    private static void createAndShowGUI() {
        JFrame f = new JFrame("MouseEvent");
        f.setLayout(new FlowLayout());
        f.setSize(300,200);
        f.setLocation(300,200);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton but = new JButton("Button");
        f.add(but);

        but.addMouseListener(new MouseListener() {
            public void mouseReleased(MouseEvent e) {
                System.out.println("mouseReleased-鼠标放开事件");
            }
            public void mousePressed(MouseEvent e) {
                System.out.println("mousePressed-鼠标按下事件");
            }
            public void mouseExited(MouseEvent e) {
                System.out.println("mouseExited-鼠标移出按钮区事件");
            }
            public void mouseEntered(MouseEvent e) {
                System.out.println("mouseEntered-鼠标进入按钮区事件");
            }
            public void mouseClicked(MouseEvent e) {
                System.out.println("mouseClicked-鼠标完成单击事件");
            }
        });
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(MouseEvent::createAndShowGUI);
}
}

1个回答

点一下 弹窗口中的 Add unimplemented methods 加全未实现的接口方法,然后保存后重新编译下就好了。

KK7777777
想吃螃蟹的老康 感谢前辈,问题出在我定义的类名和库类同名了,已解决。
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java中关于适配器对事件的处理问题??
import java.awt.Color; import java.awt.Font; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.LineBorder; public class Calculator extends JFrame{ private JTextField jf_1, jf_2; private JButton jb; private JPanel jp=new JPanel(null); private String str[] = {"MC","MR","MS","M+","M-","←","CE","C","±","√","7","8","9", "/","%","4","5","6","*","1/x","1","2","3","-","=","0",".","+"}; /** * 设置总体布局 */ public Calculator(){ super("计算器"); //this.setLayout(null); this.setSize(210, 330); //设置frame的宽和高 this.setResizable(false);//设置frame的大小无法改变 //JPanel jp=new JPanel(null);//等价于 JPanel jp=new JPanel(); jp.setLayout(null);可自行设计布局 //jp.setBounds(1000,100,20,24);//设置面板在frame的位置及自身大小 /**显示屏**/ jf_1 = new JTextField(""); jf_2 = new JTextField("0"); jf_1.setEnabled(false);//设置该组件不能再次被输入文本 jf_2.setEnabled(false); jf_1.setBounds(0, 0, 205, 30); jf_2.setBounds(0, 30, 205, 30); jf_1.setHorizontalAlignment(JLabel.RIGHT);//设置文本在组件中的显示位置 jf_2.setHorizontalAlignment(JLabel.RIGHT); /**按钮 35px*29px 28个***/ /**前24个**/ for(int i=0; i<24; i++) { jb = new JButton(str[i]); jb.setMargin(new java.awt.Insets(0,0,0,0)); //命令按钮里的文本距离图标上左下右距离 jb.setBounds(i%5*(35+5), 60+i/5*(30+5)+5, 35, 30);//设置命令按钮距离面板左,上距离。图标的长宽。 jb.addMouseListener(new MyMouseListener()); jp.add(jb); //两命令按钮间的垂直间隔为5,水平间隔为7 } jb = new JButton(str[24]); //添加"=" jb.setMargin(new java.awt.Insets(0, 0, 0, 0)); jb.setBounds((24%5)*(35+5), 60+24/5*(30+5)+5, 35, 30+30+5); jb.addMouseListener(new MyMouseListener()); jp.add(jb); jb = new JButton(str[25]); //添加"0" jb.setMargin(new java.awt.Insets(0, 0, 0, 0)); jb.setBounds((25%5)*(35+5), 60+25/5*(30+5)+5, 35+35+5, 30); jb.addMouseListener(new MyMouseListener()); jp.add(jb); // // jb = new JButton(str[26]); //添加"." // jb.setMargin(new java.awt.Insets(0, 0, 0, 0)); // jb.setBounds((27%5)*(35+5), 60+27/5*(30+5)+5, 35, 30); // jb.addMouseListener(new MyMouseListener()); // jp.add(jb); // // jb = new JButton(str[27]); //添加"+" // jb.setMargin(new java.awt.Insets(0, 0, 0, 0)); // jb.setBounds((28%5)*(35+5), 60+28/5*(30+5)+5, 35, 30); // jp.add(jb); // jp.add(jf_1); jp.add(jf_2); this.add(jp); this.setVisible(true); } /** * 内部类:事件处理 * @author * */ class MyMouseListener extends MouseAdapter{ public void mouseClicked(MouseEvent e){ JButton jbb = (JButton)e.getSource(); if(jbb.getText() == "="){ jf_2.setText("jk"); JButton j ; j = new JButton(str[26]); //添加"." j.setMargin(new java.awt.Insets(0, 0, 0, 0)); j.setBounds((27%5)*(35+5), 60+27/5*(30+5)+5, 35, 30); // j.addMouseListener(new MyMouseListener()); //Calculator.this.jp.add(j); Calculator.this.add(jp.add(j)); Calculator.this.setVisible(true); //点击“=”按钮后,“.”为什么不是添加在"0"的后面啊??? } } } public static void main(String arg[]){ new Calculator(); } }
用数组批量创建的面板,在监听事件时怎么知道它是第几个面板?
**public static JPanel jpa3 = new JPanel();** static int u = 0; public static void JPanels() { List<Novels> list = new Sqlb().queryAllStudents();//获取数据库文件 JPanel jp[]=new JPanel[list.size()]; for(int i=0; u<list.size();u++){ Novels s = list.get(u); jp[i]=new JPanel(); jp[i].setBackground(Color.decode("#ffffff"));//书籍背景颜色 jp[i].setPreferredSize(new Dimension(215, 140));//设置JPanel的大小 jp[i].setLayout(null);//布局new FlowLayout(FlowLayout.LEFT) jpa3.add(jp[i]); ImageIcon icon = new ImageIcon(s.getimg());//获取图片 icon.setImage(icon.getImage().getScaledInstance(96,128,Image.SCALE_DEFAULT));//强制图片大小 JLabel la = new JLabel(icon);//文本图片 jp[i].add(la); la.setBounds(5,5 , 96,128); //la.setPreferredSize(new Dimension(96,128));//文本图片大小 JLabel la2 = new JLabel(s.getbook());//书名 jp[i].add(la2); la2.setBounds(105,5 , 120,20); la2.setFont(new Font("黑体", Font.PLAIN, 16));//字体,字体大小 JLabel la3 = new JLabel(s.getant());//作者 jp[i].add(la3); la3.setBounds(105,35 , 120,20); float f = s.getwnu()/10000; JLabel la4 = new JLabel(f+" 万字");//字数s.getwnu(); la4.setBounds(105,65 , 120,20); jp[i].add(la4); JLabel la5 = new JLabel("更新:"+s.getlsd());//时间更新s.getlsd() la5.setBounds(105,95 , 120,20); jp[i].add(la5); la.addMouseListener(new MouseListener(){//书架书籍 public void mouseClicked(MouseEvent e) {//切换页面 //jf.dispose();//销毁当前页面 new Novel_yd().Novelyd();//打开一个新的页面 } public void mouseEntered(MouseEvent e) {// 处理鼠标移入 la.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); //鼠标形状 }public void mouseExited(MouseEvent e) { // 处理鼠标离开 }public void mousePressed(MouseEvent e) { // 处理鼠标按下 }public void mouseReleased(MouseEvent e) { // 处理鼠标释放 } }); } } ``` ```
JAVA风景日历,运行时,日历是有了,但风景没有,这是为什么?
运行是这样 ![图片说明](https://img-ask.csdn.net/upload/201911/14/1573703884_780623.jpg) 但是想要这样![图片说明](https://img-ask.csdn.net/upload/201911/14/1573708341_322515.jpg) ``` import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.*; import java.util.Timer; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; //这是一个用JList和JTable完成的简单日历 public class calender { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new CalendarFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } class CalendarFrame extends JFrame { private static final long serialVersionUID = 8067844586793608064L; JPanel listPanel; // 显示月份的列表面板 JPanel tablePanel; // 显示日期的表格面板 JPanel textPanel; // 文本面板 JMenuBar menuBar; // JMenuBar,JMenu定义的变量都没有实现功能 JMenu fileMenu; JMenu editMenu; JMenu formatMenu; JMenu lookMenu; JMenu helpMenu; JEditorPane text; // 自带复制,剪切和删除快捷键功能的面板 JScrollPane textscrollpane; JScrollPane tablescrollpane; @SuppressWarnings("rawtypes") JList list; // 显示月份的列表 JTable table; // 显示日期的表格 JPanel yearPanel; // 显示年份的面板 JSpinner spinner; // JSpinner空间 JLabel label = new JLabel(); public static boolean flag = true; @SuppressWarnings({ "unchecked", "rawtypes" }) public CalendarFrame() { table = new JTable(new MyTableModel()); tablescrollpane = new JScrollPane(table); for (int i = 0; i < 7; i++) { TableColumn column = table.getColumnModel().getColumn(i);// 获取表格每一列 column.setResizable(false);// 不允许改变列的大小 } table.setBackground(Color.GREEN); table.setRowHeight(72); // 设定每列的大小 table.setRowSelectionAllowed(false);// 设定行的选择模式 table.setDefaultRenderer(String.class, new MyTableRenderer()); list = new JList(new AbstractListModel() // 匿名的list模型类,提供list显示的月份数据 { private static final long serialVersionUID = -3703164069291737586L; public Object getElementAt(int index) { String obj = null; switch (index) { case 0: obj = "Jan"; break; case 1: obj = "Feb"; break; case 2: obj = "Mar"; break; case 3: obj = "Apr"; break; case 4: obj = "May"; break; case 5: obj = "Jun"; break; case 6: obj = "Jul"; break; case 7: obj = "Aug"; break; case 8: obj = "Sep"; break; case 9: obj = "Oct"; break; case 10: obj = "Nov"; break; case 11: obj = "Dec"; break; } return obj; } @Override public int getSize() { return 12; } }); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 设定列表的选择模式 list.setCellRenderer(new MyListCellRenderer()); // 列表元素的绘制类MyListCellRenderer list.setSelectedIndex(Calendar.getInstance().get(Calendar.MONTH));// JList默认的月份为现实的月份 list.addListSelectionListener(new ListSelectionListener()// 当某个列表被选中时,更新日期table控件 { public void valueChanged(ListSelectionEvent e) { flag = true; table.updateUI(); } }); list.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { if (evt.getClickCount() == 2) { String s = (String) list.getSelectedValue(); JOptionPane.showMessageDialog(list, s); } } }); listPanel = new JPanel(); listPanel.setLayout(new BorderLayout()); listPanel.add(list); tablePanel = new JPanel(); tablePanel.setBackground(Color.white); tablePanel.setLayout(new BorderLayout()); tablePanel.add(tablescrollpane); // table.setBackground(Color.green); yearPanel = new JPanel();// 将label控件和JSpinner控件加入年份面板上 yearPanel.setLayout(new GridLayout(0, 4)); JLabel gongyuan = new JLabel("公元", JLabel.RIGHT); JLabel year = new JLabel("年"); spinner = new JSpinner(new SpinnerNumberModel(Calendar.getInstance() .get(Calendar.YEAR), null, null, 1)); spinner.addChangeListener(new ChangeListener() // 为JSpinner空间添加事件监听器 { @Override public void stateChanged(ChangeEvent e) { flag = true; table.updateUI(); } }); yearPanel.add(gongyuan); yearPanel.add(spinner); yearPanel.add(year); yearPanel.add(label); showTime(); new Timer().schedule(new TimerTask() { @Override public void run() { while (true) { showTime(); } } }, 1000); tablePanel.add(yearPanel, BorderLayout.NORTH);// 将年份面板加入到表格面板的北部 textPanel = new JPanel(); textPanel.setLayout(new BorderLayout()); text = new JEditorPane(); textscrollpane = new JScrollPane(text); textPanel.add(textscrollpane); text.setFont(new Font("SansSerif", Font.PLAIN, 40)); tablePanel.add(textPanel, BorderLayout.SOUTH); menuBar = new JMenuBar();// JMenu定义的空间都没实现功能 fileMenu = new JMenu("文件"); editMenu = new JMenu("编辑"); formatMenu = new JMenu("格式"); lookMenu = new JMenu("查看"); helpMenu = new JMenu("帮助"); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(formatMenu); menuBar.add(lookMenu); menuBar.add(helpMenu); GridBagLayout layout = new GridBagLayout(); // 设成GridBagLayout布局 GridBagConstraints constraints = new GridBagConstraints(); this.setFont(new Font("SansSerif", Font.PLAIN, 14)); this.setLayout(layout); this.setTitle("风景日历"); // 设定标题 this.setIconImage(new ImageIcon("res\\title.jpg").getImage()); // 设定图标 constraints.fill = GridBagConstraints.BOTH; constraints.weightx = 0.5; constraints.weighty = 0.5; layout.setConstraints(listPanel, constraints); constraints.weightx = 8.0; constraints.weighty = 0.5; layout.setConstraints(tablePanel, constraints); this.setJMenuBar(menuBar); this.add(listPanel); this.add(tablePanel); this.setSize(this.getToolkit().getScreenSize().width * 3 / 4, this .getToolkit().getScreenSize().height * 3 / 4); // 设定窗体的大小 } private void showTime() { int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); int minute = Calendar.getInstance().get(Calendar.MINUTE); int second = Calendar.getInstance().get(Calendar.SECOND); StringBuilder sb = new StringBuilder(); if (hour < 10) { sb.append("0" + hour); } else { sb.append(hour); } if (minute < 10) { sb.append(":0" + minute); } else { sb.append(":" + minute); } if (second < 10) { sb.append(":0" + second); } else sb.append(":" + second); label.setFont(new Font("SansSerif", Font.BOLD, 12)); label.setForeground(Color.BLACK); label.setText(sb.toString()); } class MyTableModel extends AbstractTableModel // 表格模型类,提供表格数据 { private static final long serialVersionUID = 1L; String[] columnName = new String[] // 表格列名 { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; @Override public int getColumnCount() // 返回表格列数 { return columnName.length; } public int getRowCount() // 返回表格行数 { return 6; } public String getColumnName(int col) // 获得表格列名 { return columnName[col]; } public Class<? extends Object> getColumnClass(int c) { return getValueAt(0, c).getClass(); } public Object getValueAt(int rowIndex, int columnIndex) { int month = list.getSelectedIndex();// 获得列表的月份 int year = (Integer) spinner.getValue();// 获得spinner显示的年份 GregorianCalendar gc = new GregorianCalendar(year, month, 1); int dayOfWeek = gc.get(Calendar.DAY_OF_WEEK) - 1; // 获得这个月的第一天是星期几 int countDayInMonth = 0;// 某月的总天数,这里的月是从0-11,表示1-12月 if (month == 0 || month == 2 || month == 4 || month == 6 || month == 7 || month == 9 || month == 11) { countDayInMonth = 31; // 是31天的月份 } else if (month == 3 || month == 5 || month == 8 || month == 10) { countDayInMonth = 30; // 是30天的月份 } else if (gc.isLeapYear(year) && month == 1) { countDayInMonth = 29; // 闰年2月 } else if (!gc.isLeapYear(year) && month == 1) { countDayInMonth = 28; // 非闰年2月 } String value = ""; // 因为返回值是Object类型,所以不能直接返回int类型的数据,所以转换成String类型 if (rowIndex == 0) // 第一列的数据 { if (columnIndex < dayOfWeek) { value = ""; } else { value = "" + (columnIndex - dayOfWeek + 1); } } else // 其余列的数据 { if (((rowIndex - 1) * 7) + (columnIndex + 1 + 7 - dayOfWeek) <= countDayInMonth) value = (((rowIndex - 1) * 7) + (columnIndex + 1 + 7 - dayOfWeek)) + ""; } return value; } } @SuppressWarnings("rawtypes") class MyListCellRenderer extends JLabel implements ListCellRenderer // 列表元素绘制类继承自JLabel,实现ListCellRenderer接口 { private static final long serialVersionUID = 1L; public Component getListCellRendererComponent(JList list, // the list Object value, // value to display int index, // cell index boolean isSelected, // is the cell selected boolean cellHasFocus) // does the cell have focus { String s = value.toString().trim(); // 获取选中元素的字符内容 setText(s); // 显示这个字符 Dimension dimension = list.getSize(); // 设定这个每个元素的大小 int height = dimension.height / 12; int width = dimension.width; setSize(width, height); if (isSelected) // 如果该元素被选中,则背景色为红色 { setBackground(Color.red); setForeground(list.getSelectionBackground()); } else // 未被选中的元素背景色显示为灰色,前景色为粉红色 { setBackground(Color.gray); setForeground(Color.pink); } setIcon(new ImageIcon("res\\mon.jpg")); // 设定该元素的图标 setEnabled(list.isEnabled()); setFont(new Font("SansSerif", Font.PLAIN, 20)); // 设定字体大小 setOpaque(true); return this; } } class MyTableRenderer extends JLabel implements TableCellRenderer { private static final long serialVersionUID = 1L; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if ((Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "") // 如果这个标签上的值等于该天的值 .equals(value) && flag == true // 标记为true && list.getSelectedIndex() == Calendar.getInstance().get( Calendar.MONTH) // 列表显示的月份是该月的值 && (Integer) spinner.getValue() == Calendar.getInstance() .get(Calendar.YEAR))// spinner显示的年份是该年 { setFont(new Font("SansSerif", Font.PLAIN, 40)); // 设定字体大小 setText((String) value); // 显示日期字符串 setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); setForeground(Color.RED); // 设定字符串颜色 flag = false; } else // 如果不是改日的标签上的值 { setFont(new Font("SansSerif", Font.PLAIN, 40)); // 设定字体大小 setText((String) value); // 显示标签上的日期字符串 if (hasFocus) // 如果是被点中的表格的单元格 { setBorder(UIManager .getBorder("Table.focusCellHighlightBorder")); // 设定边框 setForeground(Color.RED);// 设定日期字符串颜色 } else { setForeground(null); setBorder(null); } } return this; } } } ```
关于JPanel 点击鼠标画图的问题,会出现mousePressed空指针是为什么呢
public class iPanel extends JPanel { private static final int FRAME_HEIGHT = 800; private static final int FRAME_WIDTH = 800; private JFrame frame; private JPanel drawPanel; private JToolBar toolbar; private JButton lineButton; private JButton rectangleButton; private JButton ellipseButton; private Color drawingColor;; private int shape; private int[] position; public iPanel(){ this.frame = new JFrame("Easy Painting"); this.drawPanel = new JPanel(); toolbar = new JToolBar(); drawPanel.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) {} public void mouseReleased(MouseEvent e) { position[2]= e.getX(); position[3] = e.getY(); paint(); } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) { position[0] = e.getX(); position[1] = e.getY(); } }); setupComponents(); } private void setupToolbar(){ lineButton = new JButton ("line"); rectangleButton = new JButton ("rectangle"); ellipseButton = new JButton ("ellipse"); colorButton = new JButton ("color"); toolbar.add(lineButton); toolbar.add(rectangleButton); toolbar.add(ellipseButton); toolbar.add(colorButton); lineButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ shape = 0; } }); rectangleButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ shape = 1; } }); ellipseButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ shape = 2; } }); frame.add(toolbar, BorderLayout.NORTH); } private void setupComponents(){ setupToolbar(); frame.add(drawPanel, BorderLayout.CENTER); frame.setSize (FRAME_WIDTH, FRAME_HEIGHT); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void paint () { int startx = position[0]; int starty = position[1]; int endx = position[2]; int endy = position[3]; Graphics g = getGraphics(); g.setColor(drawingColor); switch (shape) { case 0: g.drawLine(startx, starty, endx, endy); break; case 1: g.drawRect(startx, starty, Math.abs(endx-startx), Math.abs(endy-starty)); break; case 2: g.drawOval(startx, starty, Math.abs(endx-startx), Math.abs(endy-starty)); break; case 3: g.drawRect(startx, starty, Math.abs(endx-startx), Math.abs(endx-startx)); break; case 4: g.drawOval(startx, starty, Math.abs(endx-startx), Math.abs(endx-startx)); break; } } public static void main(String[] args){ new iPanel(); } } 运行会报错: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at 1.mousePressed(java:63) mouseReleased
关于简易计算机的Java程序 为什么一直报错?
import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.text.DecimalFormat; import javax.swing.AbstractButton; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class calculator { private JFrame f =new JFrame("Calculator"); private JPanel inputPanel =new JPanel(); private JPanel buttonsPanel=new JPanel(); private JPanel operationPanel =new JPanel(); private JTextField input=new JTextField(20); private JTextField show=new JTextField(20); private JButton backspace=new JButton("退格"); private JButton CE=new JButton("CE"); private JButton C=new JButton("C"); private JButton sqrt=new JButton("sqrt"); private JButton fang=new JButton("^"); private JButton mod=new JButton("%"); private JButton dao=new JButton("1/x"); private JButton sin=new JButton("sin"); private JButton cos=new JButton("cos"); private JButton lg=new JButton("ln"); private JButton add=new JButton("+"); private JButton sub=new JButton("-"); private JButton mul=new JButton("*"); private JButton div=new JButton("/"); private JButton decimal=new JButton ("."); private JButton equal=new JButton ("="); private JButton zero=new JButton ("0"); private JButton one=new JButton ("1"); private JButton two=new JButton ("2"); private JButton three=new JButton ("3"); private JButton four=new JButton ("4"); private JButton five=new JButton ("5"); private JButton six=new JButton ("6"); private JButton seven=new JButton ("7"); private JButton eight=new JButton ("8"); private JButton nine=new JButton ("9"); private String numl=""; private String operator=""; public static void main(String[] args){ new calculator(); } public calculator(){ show.setText("0"); show.setEditable(false); show.setHorizontalAlignment(JTextField.RIGHT); input.setText("0"); input.setEditable(false); input.setHorizontalAlignment(JTextField.RIGHT); inputPanel.setLayout(new GridLayout(2,1)); inputPanel.add(show); inputPanel.add(input); f.add(inputPanel,BorderLayout.NORTH); operationPanel.add(sin); sin.setBackground(new Color(100,255,10)); operationPanel.add(cos); cos.setBackground(new Color(100,255,10)); operationPanel.add(CE); CE.setBackground(new Color(100,255,10)); operationPanel.add(C); C.setBackground(new Color(100,255,10)); operationPanel.add(backspace); backspace.setBackground(new Color(100,255,10)); f.add(operationPanel,BorderLayout.CENTER); buttonsPanel.setLayout(new GridLayout(4,5)); buttonsPanel.add(seven); buttonsPanel.add(eight); buttonsPanel.add(nine); buttonsPanel.add(div); buttonsPanel.add(mod); buttonsPanel.add(four); buttonsPanel.add(five); buttonsPanel.add(six); buttonsPanel.add(mul); buttonsPanel.add(fang); buttonsPanel.add(one); buttonsPanel.add(two); buttonsPanel.add(three); buttonsPanel.add(sub); buttonsPanel.add(sqrt); buttonsPanel.add(zero); buttonsPanel.add(decimal); buttonsPanel.add(equal); buttonsPanel.add(add); buttonsPanel.add(dao); f.add(buttonsPanel, BorderLayout.SOUTH); backspace.addMouseListener(new OperationMouseListener()); CE.addMouseListener(new OperationMouseListener()); C.addMouseListener(new OperationMouseListener()); decimal.addMouseListener(new OperationMouseListener()); equal.addMouseListener(new OperationMouseListener()); add.addMouseListener(new CaleMouseListener()); sub.addMouseListener(new CaleMouseListener()); mul.addMouseListener(new CaleMouseListener()); div.addMouseListener(new CaleMouseListener()); sqrt.addMouseListener(new CaleMouseListener()); fang.addMouseListener(new CaleMouseListener()); mod.addMouseListener(new CaleMouseListener()); dao.addMouseListener(new CaleMouseListener()); sin.addMouseListener(new CaleMouseListener()); cos.addMouseListener(new CaleMouseListener()); zero.addMouseListener(new NumberMouseListener()); one.addMouseListener(new NumberMouseListener()); two.addMouseListener(new NumberMouseListener()); three.addMouseListener(new NumberMouseListener()); four.addMouseListener(new NumberMouseListener()); five.addMouseListener(new NumberMouseListener()); six.addMouseListener(new NumberMouseListener()); seven.addMouseListener(new NumberMouseListener()); eight.addMouseListener(new NumberMouseListener()); nine.addMouseListener(new NumberMouseListener()); f.setVisible(true); f.pack(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
Java中窗口关闭事件。
程序代码如下: package com.packageTemp; import java.awt.event.*; import javax.swing.*; import java.awt.*; public class MouseAdapterTest { JFrame f=null; JButton btn=null; public static void main(String[] args) { new MouseAdapterTest(); } //构造函数 public MouseAdapterTest() { f=new JFrame("Test"); btn=new JButton("按钮1"); //添加监听事件 btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { System.out.println("action ok"); } }); btn.addMouseListener(new MouseAdapter(){ int count=1; public void mouseEntered(MouseEvent e){ System.out.println("鼠标进入了按钮区域"+count++); } public void mouseExited(MouseEvent e) { System.out.println("鼠标离开了按钮区域"+count++); } }); f.add(btn); f.setBounds(100, 200, 500, 400); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 此行是重点 f.setVisible(true); } } 如代码所示:如果我写上f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ,则点击右上角的X时,可以关闭窗口,并且程序停止运行。 但是我好奇的是,为什么我没有写窗体监听事件,即WindowListener,为什么点击X,图形化界面依旧可以X掉。 求大神指点
如何把多个数字键盘改成只弹出一个??
利用Java swing编写的一个程序,每次点击文本框会弹出一个数字键盘,所以最终程序会有很多个数字键盘,技术菜鸟请求大神给些思路或者办法???? ``` private JTextField freq = new JTextField(); private JTextField power = new JTextField(); private JTextField workTime = new JTextField(); private JTextField sendTime = new JTextField(); private JTextField stopTime = new JTextField(); private JTextField modulationRate = new JTextField(); private JTextField modulationBrand = new JTextField(); freq.addMouseListener(new KeyMouseClick(freq));//对频率文本框添加监听事件 power.addMouseListener(new KeyMouseClick(power));//对功率添加监听事件 workTime.addMouseListener(new KeyMouseClick(workTime)); sendTime.addMouseListener(new KeyMouseClick(sendTime)); stopTime.addMouseListener(new KeyMouseClick(stopTime)); modulationRate.addMouseListener(new KeyMouseClick(modulationRate)); modulationBrand.addMouseListener(new KeyMouseClick(modulationBrand)); //鼠标点击事件类 public class KeyMouseClick extends MouseAdapter { private JTextField jtf ; public KeyMouseClick(JTextField jtx) { this.jtf = jtx ; } @Override public void mouseClicked(MouseEvent m) { new Thread(new NumberKey(jtf)).start();//开启数字键盘线程 } } //数字键盘窗口 public class NumberKey extends JFrame implements Runnable{ public NumberKey(JTextField jtf) { this.tx = jtf ; initComponents();//初始化各组件 } } ``` ![图片说明](https://img-ask.csdn.net/upload/201907/09/1562642084_214040.png) ![图片说明](https://img-ask.csdn.net/upload/201907/09/1562642089_675533.png)
java tcp连接服务端,每隔一秒发送一条消息,双击button开启,但是这时候界面就卡死了。怎么样才能不卡死
``` btnNewButton.addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { String ip = "192.168.1.25"; // 服务器端ip地址 int port = 8899; //Socket socketSend = null; try { socket = new Socket(ip, port); //connectStatus = true; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //OutputStream outputStream = null; try { outputStream = socket.getOutputStream(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //InputStream inputStream = null; try { inputStream = socket.getInputStream(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } while (true) { try { outputStream.write(buff); outputStream.flush(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { Thread.sleep(1000); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } byte revBuff[] = new byte[1024]; try { inputStream.read(revBuff); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } System.out.println(new String(revBuff)); } } }); ```
JAVA中画的图形不能显示,想知道问题出在哪?
package ObjectPrinciple; import java.awt.EventQueue; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JToolBar; import java.awt.BorderLayout; import java.awt.Button; import javax.swing.JPanel; import javax.swing.JRadioButton; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JList; public class DrawingBroad implements ItemListener{ private JFrame frame; private Canvas canvas; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { DrawingBroad window = new DrawingBroad(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public void itemStateChanged(ItemEvent e) { JRadioButton rdb; rdb=(JRadioButton) e.getSource();//把获得的来源转换成单选按钮的类型 //强制转换 事件是由哪个对象发出来的 if(rdb.isSelected())//保证其中有一个按钮是被选中的 { if (rdb.getText()=="Lines") {//也就是按钮的名称,做到匹配 canvas.setTodoAction(0);//在中做得事件进行编号 } else if (rdb.getText()=="rectangle") { canvas.setTodoAction(1); } else if (rdb.getText()=="circle") { canvas.setTodoAction(2); }//可以在此添加代码,新按钮 else if (rdb.getText()=="move") { canvas.setTodoAction(100); } } } /** * Create the application. */ public DrawingBroad() {//构造函数, initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 800, 600); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JSplitPane splitPane = new JSplitPane(); splitPane.setDividerLocation(160); frame.getContentPane().add(splitPane, BorderLayout.CENTER); canvas= new Canvas(); splitPane.setRightComponent(canvas); JList<String> list = new JList<String>(); splitPane.setLeftComponent(list); canvas.setLayers(list); JToolBar toolBar = new JToolBar(); frame.getContentPane().add(toolBar, BorderLayout.NORTH); JRadioButton rdbtnLines = new JRadioButton("lines"); rdbtnLines.setSelected(true);//首先选择一个按钮 rdbtnLines.addItemListener(this); toolBar.add(rdbtnLines); JRadioButton rdbtnRectangle = new JRadioButton("rectangle"); rdbtnRectangle.addItemListener(this); toolBar.add(rdbtnRectangle); JRadioButton rdbtnMove = new JRadioButton("move"); rdbtnMove.addItemListener(this); toolBar.add(rdbtnMove); JRadioButton rdbtnCircle = new JRadioButton("circle"); rdbtnCircle.addItemListener(this); toolBar.add(rdbtnCircle); ButtonGroup bg=new ButtonGroup(); bg.add(rdbtnLines); bg.add(rdbtnRectangle); bg.add(rdbtnMove); bg.add(rdbtnCircle); } } package ObjectPrinciple; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.util.ArrayList; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.event.MouseInputAdapter; import javax.swing.event.MouseInputListener; public class Canvas extends JPanel { private int todoAction; private Rectangle scope; private ArrayList<Shape> shapes; private JList<String > layers; public void setLayers(JList<String> layers) { this.layers = layers; } public void setTodoAction(int todoAction) { this.todoAction = todoAction; } public Canvas() { shapes= new ArrayList<Shape>(); addMouseMotionListener(mouseHandler); addMouseListener(mouseHandler); } public void paintShape(Shape s) { // TODO Auto-generated method stub shapes.add(s); String[] strings = new String[shapes.size()]; int i=0; for (Shape shape:shapes) { strings[i++]=shape.toString(); } layers.setListData(strings); repaint(); } private MouseInputListener mouseHandler = new MouseInputAdapter() { Point startPoint; @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub //初始化 startPoint = e.getPoint(); scope = new Rectangle(); } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub //消除矩形框 if(todoAction==100) { Moving m = shapes.get(layers.getSelectedIndex()); m.move(e.getPoint().x, e.getPoint().y); scope = null; repaint(); } else { setScope(startPoint,e.getPoint()); if(scope.width > 0||scope.height>0) if(todoAction==0) { MyLine line = new MyLine(); line.setShape(scope.x, scope.y, scope.width, scope.height, 0, "line"); paintShape(line); }else if(todoAction == 1) { MyRectangle rectangle = new MyRectangle(); rectangle.setShape(scope.x, scope.y, scope.width, scope.height, 1, "rectangle"); paintShape(rectangle); }else if (todoAction == 2) { Circle circle= new Circle(); circle.setShape(scope.x, scope.y, scope.width, scope.height, 2, "circle"); paintShape(circle); } scope=null; repaint(); } } @Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub if(scope==null) { setScope(startPoint, e.getPoint()); } repaint(); } private void setScope(Point starPoint,Point endPoint) { int x=Math.min(startPoint.x, endPoint.x); int y=Math.min(startPoint.y, endPoint.y); int w=Math.abs(startPoint.x - endPoint.x); int h=Math.abs(startPoint.y - endPoint.y); scope.setBounds(x,y,w,h); } }; @Override public void print(Graphics g) { // TODO Auto-generated method stub super.print(g); g.setColor(Color.BLACK); if(scope != null) g.drawRect(scope.x, scope.y, scope.width,scope.height); //需要一个队列,需要把画的图形加到队列,调用每个元素的drawingshape方法 for(Drawing d:shapes) { d.drawingShape(g); } } } package ObjectPrinciple; import java.awt.Graphics; public interface Drawing { public void drawingShape(Graphics g); } package ObjectPrinciple; public interface Moving { public void move(int x,int y); } package ObjectPrinciple; public abstract class Shape implements Drawing,Moving{ //位置 int x,y; //宽度,高度 int width,height; int shapetype; String shapename; public void setShape(int x, int y, int width, int height, int shapetype, String shapename) { //super(); this.x = x; this.y = y; this.width = width; this.height = height; this.shapetype = shapetype; this.shapename = shapename; } @Override public void move(int x, int y) { // TODO Auto-generated method stub this.x = x; this.y = y; } @Override public String toString() { return shapename; } } package ObjectPrinciple; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; public class MyLine extends Shape { public void drawingShape(Graphics g) { Graphics2D g2d=(Graphics2D) g; Line2D line2d = new Line2D.Double(x,y,x+width,y+height); g2d.draw(line2d); } } package ObjectPrinciple; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; public class MyRectangle extends Shape { @Override public void drawingShape(Graphics g) { // TODO Auto-generated method stub Graphics2D g2d=(Graphics2D) g; //Rectangle2D rect = new Line2D Rectangle2D rect = new Rectangle2D.Double(x,y,x+width,y+height); g2d.draw(rect); } }
一个简单计算器java程序,不知道为什么除法总是算错
一个简单计算器java程序,不知道为什么除法总是算错(不是全概率是高概率应该说,麻烦大大帮忙看看,非常感激 ``` package com.calculator; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import javax.swing.JTextField; import java.awt.FlowLayout; import javax.swing.BoxLayout; import java.awt.GridLayout; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.layout.ColumnSpec; import com.jgoodies.forms.factories.FormFactory; import com.jgoodies.forms.layout.RowSpec; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.JButton; import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Component; import java.awt.Point; public class Calculator_ extends JFrame { private JPanel contentPane; private JTextField tf; private JButton b7; private JButton b8; private JButton b9; private JButton b4; private JButton b5; private JButton b6; private JPanel panel_1; private JButton b1; private JButton b2; private JButton b3; private JButton b0; private JButton bpoint; private JButton badd; private JButton bcut; private JButton bmul; private JButton bdiv; private JButton bresult; private JButton bempty; StringBuilder sb=new StringBuilder(""); StringBuilder sb2=new StringBuilder(""); char c; double d; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Calculator_ frame = new Calculator_(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Calculator_() { setTitle("calculator"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 384, 279); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JPanel panel = new JPanel(); panel.setBounds(0, 0, 432, 55); contentPane.add(panel); panel.setLayout(new BorderLayout(0, 0)); tf = new JTextField(); tf.setEditable(false); panel.add(tf); tf.setColumns(10); panel_1 = new JPanel(); panel_1.setBounds(436, 53, -434, 260); contentPane.add(panel_1); b7 = new JButton("7"); b7.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb.append("7"); tf.setText(sb.toString()); } }); b7.setBounds(0, 53, 80, 46); contentPane.add(b7); b8 = new JButton("8"); b8.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb.append("8"); tf.setText(sb.toString()); } }); b8.setBounds(78, 53, 80, 46); contentPane.add(b8); b9 = new JButton("9"); b9.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent arg0) { sb.append("9"); tf.setText(sb.toString()); } }); b9.setBounds(158, 53, 80, 46); contentPane.add(b9); b4 = new JButton("4"); b4.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb.append("4"); tf.setText(sb.toString()); } }); b4.setBounds(0, 97, 80, 46); contentPane.add(b4); b5 = new JButton("5"); b5.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb.append("5"); tf.setText(sb.toString()); } }); b5.setBounds(78, 97, 80, 46); contentPane.add(b5); b6 = new JButton("6"); b6.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent arg0) { sb.append("6"); tf.setText(sb.toString()); } }); b6.setBounds(158, 97, 80, 46); contentPane.add(b6); b1 = new JButton("1"); b1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb.append("1"); tf.setText(sb.toString()); } }); b1.setBounds(0, 144, 80, 46); contentPane.add(b1); b2 = new JButton("2"); b2.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb.append("2"); tf.setText(sb.toString()); } }); b2.setBounds(78, 144, 80, 46); contentPane.add(b2); b3 = new JButton("3"); b3.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb.append("3"); tf.setText(sb.toString()); } }); b3.setBounds(158, 144, 80, 46); contentPane.add(b3); b0 = new JButton("0"); b0.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb.append("0"); tf.setText(sb.toString()); } }); b0.setBounds(0, 189, 158, 46); contentPane.add(b0); bpoint = new JButton("."); bpoint.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb.append("."); tf.setText(sb.toString()); } }); bpoint.setBounds(158, 189, 80, 46); contentPane.add(bpoint); badd = new JButton("+"); badd.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb2=sb; sb=new StringBuilder(""); c='+'; tf.setText(""); } }); badd.setBounds(236, 97, 66, 46); contentPane.add(badd); bcut = new JButton("-"); bcut.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb2=sb; sb=new StringBuilder(""); c='-'; tf.setText(""); } }); bcut.setBounds(236, 144, 66, 46); contentPane.add(bcut); bmul = new JButton("*"); bmul.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb2=sb; sb=new StringBuilder(""); c='*'; tf.setText(""); } }); bmul.setBounds(301, 97, 66, 46); contentPane.add(bmul); bdiv = new JButton("/"); bdiv.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb2=sb; sb=new StringBuilder(""); c='/'; tf.setText(""); } }); bdiv.setBounds(301, 144, 66, 46); contentPane.add(bdiv); bempty = new JButton("empty"); bempty.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { sb=new StringBuilder(""); sb2=new StringBuilder(""); tf.setText(""); } }); bempty.setBounds(236, 53, 131, 46); contentPane.add(bempty); bresult = new JButton("="); bresult.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent arg0) { try { switch (c) { case '+': d = Double.parseDouble(sb.toString()) + Double.parseDouble(sb2.toString()); break; case '-': d = Double.parseDouble(sb.toString()) - Double.parseDouble(sb2.toString()); break; case '*': d = Double.parseDouble(sb.toString()) * Double.parseDouble(sb2.toString()); break; case '/': d = Double.parseDouble(sb.toString().trim()) / Double.parseDouble(sb2.toString().trim()); break; } tf.setText("" + d); } catch (NumberFormatException e) { tf.setText("输入数据格式出错,请清空重新输入"); } } }); bresult.setBounds(236, 189, 131, 45); contentPane.add(bresult); } } ```
java jscrollpanel显示问题
要JAVA写一个聊天的软件,主界面显示好友列表用JScrollPanel,想在每一个好友名字旁边添加一个聊天的按钮,先将好友名字的标签和按钮加入一个面板里面,再将面板加入到jscrollpanel中,但是用流式布局管理器的话,所有的好友姓名和按钮都显示在同一行,用网格管理器的话,就算设置两列,可是显示的时候总是显示成两行 求帮助 代码如下 import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.IOException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; public class JScroll extends JFrame { JScroll(){ JFrame j=new JFrame(); Container c=j.getContentPane(); j.getContentPane().setLayout(null); j.setTitle("Usr"); j.setSize(300,500); j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //绘制带滚珠的文本窗口用于显示好友列表 JPanel jp=new JPanel(new FlowLayout(FlowLayout.LEFT,10,10)); jp.setSize(160,400); for(int i=0;i<5;i++){ JLabel lab =new JLabel("好友列表"); JButton jb = new JButton("chat"); lab.setSize(90, 20); jb.setSize(40,20); jb.addMouseListener(new MouseListener () {//为每个标签添加鼠标事件监视器 public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub if(e.getClickCount()>=2) { // TalkWindow tkw=new TalkWindow(fName.id); // tkw.start(); System.out.println("111"); } } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } }); jp.add(lab); jp.add(jb); } JScrollPane sp=new JScrollPane(jp); sp.setBounds(20, 80, 160, 400); c.add(sp); j.setVisible(true); } public static void main(String[] args) { // TODO Auto-generated method stub new JScroll(); } } ``` ```
java中 在一张图片上画一个矩形框
我想在一张图片上画一个矩形框 矩形框写好了 继承了Jpanel 但是只要add到frame上 就会覆盖原来的内容 有什么办法不覆盖吗? 两者都保留 下面代码main函数里 先add一个videoArea 然后再add矩形框的时候 就会覆盖原来的 有什么办法不覆盖吗 求教 ``` ```import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.*; public class DrawSketch extends JPanel implements MouseMotionListener { private static final int recW = 75; private static final int MAX = 1; private Rectangle[] rect = new Rectangle[MAX]; private int numOfRecs = 0; private int currentSquareIndex = -1; public DrawSketch() { addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); currentSquareIndex = getRec(x, y); if (currentSquareIndex < 0) // not inside a square { add(x, y); } } // @Override // // public void mouseClicked(MouseEvent evt) { // // int x = evt.getX(); // // int y = evt.getY(); // // if (evt.getClickCount() >= 2) { // // remove(currentSquareIndex); // // } // // } // }); addMouseMotionListener(this); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.RED); for (int i = 0; i < numOfRecs; i++) { ((Graphics2D) g).draw(rect[i]); } } public int getRec(int x, int y) { for (int i = 0; i < numOfRecs; i++) { if (rect[i].contains(x, y)) { return i; } } return -1; } public void add(int x, int y) { if (numOfRecs < MAX) { rect[numOfRecs] = new Rectangle(x, y, recW, recW); currentSquareIndex = numOfRecs; numOfRecs++; repaint(); } } @Override public void remove(int n) { if (n < 0 || n >= numOfRecs) { return; } numOfRecs--; rect[n] = rect[numOfRecs]; if (currentSquareIndex == n) { currentSquareIndex = -1; } repaint(); } @Override public void mouseMoved(MouseEvent event) { int x = event.getX(); int y = event.getY(); if (getRec(x, y) >= 0) { setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); } else { setCursor(Cursor.getDefaultCursor()); } } @Override public void mouseDragged(MouseEvent event) { int x = event.getX(); int y = event.getY(); System.out.println(x+"---"+y); if (currentSquareIndex >= 0) { Graphics graphics = getGraphics(); graphics.setXORMode(getBackground()); graphics.setColor(Color.RED); ((Graphics2D) graphics).draw(rect[currentSquareIndex]); rect[currentSquareIndex].x = x; rect[currentSquareIndex].y = y; ((Graphics2D) graphics).draw(rect[currentSquareIndex]); graphics.dispose(); } } public static void main(String[] args) { JFrame jFrame = new JFrame(); jFrame.setTitle(""); jFrame.setSize(1000, 500); jFrame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); JLabel videoArea = new JLabel("load a video,please",JLabel.CENTER); videoArea.setFont(new Font("",Font.BOLD,40)); videoArea.setBounds(new Rectangle(0, 0, 856, 480)); videoArea.setBorder(new EmptyBorder(0, 0, 0, 0)); Container cPane = jFrame.getContentPane(); cPane.add(videoArea); cPane.add(new DrawSketch()); jFrame.setVisible(true); } }
Java 中如何控制弹出窗口的关闭,类似于QQ的天气的弹窗
本人新手,我想做一个就类似于QQ的天气的弹窗得东西,谁帮我完善一下后面的代码 我的想法是:鼠标移动到label上弹出一个窗口,移出这个label后几秒内判断鼠标移动是否到了这个窗口上,如没有就关闭这个窗口。 package com.frame; import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Frame01 extends JFrame implements MouseListener{ private JLabel loginlabel = null; public void init() { Container cont = this.getContentPane(); cont.setLayout(new BorderLayout()); JPanel panel = new JPanel(new GridBagLayout()); this.loginlabel = new JLabel("登陆"); this.loginlabel.addMouseListener(this); panel.add(this.loginlabel, local(0, 0)); cont.add(panel); } public Frame01() { this.init(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); this.setUndecorated(true); // 设置窗口大小 this.setSize(380, 292); //窗口初始位置设为中间 this.setLocationRelativeTo(null); } private GridBagConstraints local(int x, int y) { GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = x; gbc.gridy = y; return gbc; } public static void main(String[] args) { Frame01 fm = new Frame01(); fm.setVisible(true); } @Override public void mouseClicked(MouseEvent e) {} @Override public void mousePressed(MouseEvent e) {} @Override public void mouseReleased(MouseEvent e) {} //Dialog1 是外面已经做好的弹窗,这里我只做出了 移动到loginlabe上弹出Dialog1,但是后面的我就不会了 Dialog1 dia1 = new Dialog1(); @Override public void mouseEntered(MouseEvent e) { Point Location = this.getLocation(); if(e.getSource() == loginlabel) { dia1.setLocation(Location.x + 385,Location.y); dia1.setVisible(true); } } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } }
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 swing的鼠标事件
package te; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.MouseAdapter; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JList; import com.sun.glass.events.MouseEvent; public class MainFrame extends JFrame { private JPanel contentPane; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MainFrame frame = new MainFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public MainFrame() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); JList list = new JList(); contentPane.add(list, BorderLayout.CENTER); list.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ if(e.getClickCount==2) {} } }); } } 比如如上建立JList,添加鼠标监听后,无法使用getclickcount()方法。而把JList单独拿出去新建个类就可以重写了。是不是因为跟MainFrame在一起所以没法重写mouseClicked方法?有没有办法在mainframe里用的?
java按钮事件监听(为啥new Longin()不行,监听事件那里出来问题)(没币了,不好意思)
``` import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.*; public class LonginMain extends JFrame implements MouseListener,ActionListener{ private JPanel contentPane; //内容面板 private JLabel regLbel; private JButton btnNewButton; public static void main(String[] args) { //设置登录窗体风格 try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { @Override public void run() { try { //实例化登录窗体 LonginMain frame =new LonginMain(); //使登录窗体可见 frame.setVisible(true); }catch(Exception e) { e.printStackTrace(); } } }); } public LonginMain() //登录窗体的构造方法 { setTitle("校园行帮助系统"); /*******************************设置窗体左上角图标*************************/ setIconImage( Toolkit.getDefaultToolkit().getImage(LonginMain.class.getResource("logo.png")) ); /**************************************************************************/ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点击关闭按钮是关闭窗口 setBounds(300,300,600,570); contentPane=new JPanel(); //内容面板 contentPane.setLayout(new BorderLayout(0,0)); //设置内容面板的布局为边界布局 JButton btnNewButton =new JButton(""); //实例化无关文本内容的按钮 btnNewButton.setIcon(new ImageIcon(LonginMain.class.getResource("01.jpg")));//设置按钮图标 contentPane.add(btnNewButton, BorderLayout.CENTER); //把按钮放置在内容面板中间 setResizable(false); //禁止界面修改大小 setContentPane(contentPane); //把内容面板嵌入登录窗体中 ///////////////标签、、、、、、、、、、 JLabel regLbel=new JLabel(); regLbel.setIcon(new ImageIcon(LonginMain.class.getResource("01.jpg"))); regLbel.add(btnNewButton, BorderLayout.CENTER); regLbel.addMouseListener(this); //按钮事件监听器 setContentPane(btnNewButton); } @Override public void mouseClicked(MouseEvent e) { //在组件上单击(按下并释放)鼠标按钮时调用。 // TODO Auto-generated method stub if(e.getSource()==regLbel) //判断是那个按钮 { new Longin(); } } @Override public void mouseEntered(MouseEvent e) { //当鼠标进入组件时调用。 // TODO Auto-generated method stub if(e.getSource()==regLbel) //判断是那个按钮 { new Longin(); } } @Override public void mouseExited(MouseEvent e) { //当鼠标退出组件时调用。 // TODO Auto-generated method stub if(e.getSource()==regLbel) //判断是那个按钮 { new Longin(); } } @Override public void mousePressed(MouseEvent e) { //在组件上按下鼠标按钮时调用。 // TODO Auto-generated method stub if(e.getSource()==regLbel) //判断是那个按钮 { new Longin(); } } @Override public void mouseReleased(MouseEvent e) { //在组件上释放鼠标按钮时调用。 // TODO Auto-generated method stub if(e.getSource()==regLbel) //判断是那个按钮 { new Longin(); } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==regLbel) //判断是那个按钮 { new Longin(); } } } ```
关于JAVA中的鼠标监听
本人新人,今天尝试用java写图形界面,其中有一句 this.addMouseListener(this); 若要使用此句,则必须implements MouseListener 我想问下,addMouseListener()方法属于Frame类,并不属于MouseListener 为什么一定要继承该鼠标监听类.
Java制作画图程序的GUI问题
做了一个基于工厂模式的画图程序,有一些bug,画图会出现一些乱七八糟的情况。。。百思不得其解,来求助各位。。。 父类Shape: ``` import java.awt.Graphics; public abstract class Shape { abstract void draw(Graphics g); } ``` Line类: ``` import java.awt.Graphics; import java.awt.Point; public class Line extends Shape { private Point start; private Point end; Line(Point start, Point end) { this.start = start; this.end = end; } @Override void draw(Graphics g) { g.drawLine(start.x, start.y, end.x, end.y); } } ``` Circle类: ``` import java.awt.Graphics; import java.awt.Point; public class Circle extends Shape { private Point start; private Point end; public Circle(Point start, Point end) { this.start = start; this.end = end; } @Override void draw(Graphics g) { g.drawOval(Math.min(start.x, end.x), Math.min(start.y, end.y), Math.max(Math.abs(start.x), Math.abs(start.y - end.y)), Math.max(Math.abs(start.x - end.x), Math.abs(start.y - end.y))); } } ``` Rect类: ``` import java.awt.Graphics; import java.awt.Point; public class Rect extends Shape { private Point start; private Point end; public Rect(Point start, Point end) { this.start = start; this.end = end; } @Override void draw(Graphics g) { g.drawRect(Math.min(start.x, end.x), Math.min(start.y, end.y), Math.abs(start.x - end.x), Math.abs(start.y - end.y)); } } ``` 工厂类: ``` import java.awt.Point; public class ShapeFactory { public static Shape creator(int choices, Point start, Point end) { if (choices == 1) return new Line(start, end); else if (choices == 2) return new Circle(start, end); else if (choices == 3) return new Rect(start, end); else return null; } } ``` 主类,这边把代码全贴上来,想运行的朋友可以运行一下: 有些功能还没写完整,比如保存之类。 目前思路是这样:在菜单上选择要画的图形,这时会给choices赋一个值,代表要画的图形。 在鼠标点下的时候记录初始坐标。 鼠标抬起时记录终止坐标,并添加一个图形对象到保存的Vector中,再进行重绘。 ``` import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JToolBar; import javax.swing.UIManager; /** * @description 画图程序(以松耦合为目的,以工厂模式为实现方法) * @date 2016-11-19 */ /** * @description 窗口类,定义大小以及窗口形态 */ public class MyPaint extends JFrame { private static final long serialVersionUID = 1L; private DrawPanel drawingArea; private int width = 800, height = 600; public static int choices = 1; // Constructor public MyPaint() { super("Drawing Program"); /** * 定义菜单条的文件选项,设置四个选项分别为: * 新建、打开、保存以及退出 */ JToolBar buttonPanel; //按钮面板 JButton line, circle, rect; JMenuBar bar = new JMenuBar(); //菜单条 JMenu fileMenu = new JMenu("File"); // 新建 JMenuItem newItem = new JMenuItem("New"); newItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //如果被触发,则调用新建文件函数段 }}); fileMenu.add(newItem); // 保存 JMenuItem saveItem = new JMenuItem("Save"); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //如果被触发,则调用保存文件函数段 }}); fileMenu.add(saveItem); // 打开 JMenuItem loadItem = new JMenuItem("Load"); loadItem.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { //如果被触发,则调用打开文件函数段 }}); fileMenu.add(loadItem); // 设置分割线 & 退出 fileMenu.addSeparator(); JMenuItem exitItem = new JMenuItem("Exit"); exitItem.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); //如果被触发,则退出画图板程序 }}); fileMenu.add(exitItem); bar.add(fileMenu); /** * 定义菜单栏的帮助选项,对软件进行解释 */ JMenu helpMenu = new JMenu("Help"); JMenuItem aboutItem = new JMenuItem("About"); aboutItem.setMnemonic('A'); aboutItem.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "This is a mini drawing program", " 画图板程序说明 ", JOptionPane.INFORMATION_MESSAGE); }}); helpMenu.add(aboutItem); bar.add(helpMenu); /** * 按钮面板 */ buttonPanel = new JToolBar(JToolBar.HORIZONTAL); // 添加直线按钮以及点击事件 line = new JButton("Line"); line.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { repaint(); choices = 1; }}); // 添加圆按钮以及点击事件 circle = new JButton("Circle"); circle.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { repaint(); choices = 2; }}); // 添加矩形按钮以及点击事件 rect = new JButton("Rect"); rect.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { repaint(); choices = 3; }}); buttonPanel.add(line); buttonPanel.add(circle); buttonPanel.add(rect); setJMenuBar(bar); // 定义画图区域 drawingArea = new DrawPanel(); Container c = getContentPane(); // 添加控件 c.add(drawingArea, BorderLayout.CENTER); c.add(buttonPanel, BorderLayout.NORTH); // 设置窗口 setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(width, height); setVisible(true); } /** * Main */ public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } new MyPaint(); } } /** * @description 画图面板类,提供鼠标监听器 * */ class DrawPanel extends JPanel implements MouseListener { private static final long serialVersionUID = 1L; // 用于保存图形 private Vector<Shape> shapes; // 用于记录鼠标画图时留下的两个点的坐标 private Point start = new Point(); private Point end = new Point(); // Constructor public DrawPanel() { shapes = new Vector<>(); setBackground(Color.white); this.addMouseListener(this); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i < shapes.size(); i++) { draw(g, shapes.elementAt(i)); } } void draw(Graphics g, Shape shape) { shape.draw(g); } @Override public void mouseClicked(MouseEvent e) { // do nothing here } @Override public void mouseEntered(MouseEvent e) { // do nothing here } @Override public void mouseExited(MouseEvent e) { // do nothing here } //按下鼠标时记录坐标点 @Override public void mousePressed(MouseEvent e) { start.x = e.getX(); start.y = e.getY(); } // 松开鼠标时记录坐标点并将图形画出来 @Override public void mouseReleased(MouseEvent e) { end.x = e.getX(); end.y = e.getY(); shapes.add(ShapeFactory.creator(MyPaint.choices, start, end)); repaint(); } } ```
我用Java 写的一个简单截图小工具 但是出现一些在重截时出现bug 跪求大神
/**在这里贴上我注释满满的代码 求一语道破 求建议 求批评 没有贴main 方法 随便写个main方法便可运行 */ ` package com.subimaga; import java.awt.AWTException; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Cursor; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JFrame; import com.sun.awt.AWTUtilities; public class ScreenCapture extends JFrame implements MouseListener, MouseMotionListener { private BufferedImage bufferedImage = null;// 用来存放图像 // 获取屏幕的大小 private int width = Toolkit.getDefaultToolkit().getScreenSize().width; private int height = Toolkit.getDefaultToolkit().getScreenSize().height; private Point point = new Point(0, height); // 截图的左上角 private Point point2 = new Point(0, 0);// 截图右下角 private Point point3 = new Point(0, 0);// 用来处理point 与point2 的关系 // 是画笔的透明度可控制 private AlphaComposite composite; boolean isStarCut = false, isEndCut = false;// isStarCut 为开始选区 // isEndCut为截图结束仅标记结束选区 public ScreenCapture() { // 初始化窗口 this.InitScr(); } private void InitScr() // 初始化 { // 截取整个桌面作为窗口的背景 try { bufferedImage = new Robot().createScreenCapture(new Rectangle(0, 0, width, height)); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 去掉窗体结构 this.setUndecorated(true); // 设置窗体大小 this.setSize(width, height); // 设置画笔的透明度 composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f); this.addMouseListener(this); this.addMouseMotionListener(this); this.setVisible(true); this.setAlwaysOnTop(true); repaint(); } public void paint(Graphics g) { // 配置截图环境 BufferedImage buff = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR); Graphics2D g2 = buff.createGraphics(); // 画笔一 Graphics2D g3 = buff.createGraphics(); // 画笔二 用两个画笔主要是因为需要不同的透明度 g2.drawImage(bufferedImage, 0, 0, null); g2.setColor(Color.gray); g2.setComposite(composite); g2.fillRect(0, 0, width, height); // 截图的工作 if (isStarCut == true || isEndCut == true) { // 当 confirmArea(); // 处理坐标的方法 /** * 我实现的原理是 在铺了全屏截图的窗口上铺上一层灰色 透明为0.6 的实心矩形 * 根据用户在窗口拖动的坐标再另外截取一张相对应的图片铺在上面 */ g3.drawImage(bufferedImage.getSubimage(point.x, point.y, Math .abs(point2.x - point.x), Math.abs(point2.y - point.y)), point.x, point.y, null); // 画出一个绿色的空心矩形 g3.setColor(Color.green); g3.drawRect(point.x, point.y, point2.x - point.x, point2.y - point.y); } // 功能框的显示 if (isEndCut == true) { // 当选区结束 才会绘出此框 action(); // 背景框 g2.fillRect(point3.x, point3.y + 5, 200, 30); g2.setColor(Color.red); // 完成 g3.drawRect(point3.x, point3.y + 5, 60, 30); g3.setColor(Color.white); g3.drawString("完成", point3.x + 20, point3.y + 25); // 重截 g2.drawRect(point3.x + 70, point3.y + 5, 60, 30); g2.drawString("重截", point3.x + 20 + 70, point3.y + 25); // 退出 g2.drawRect(point3.x + 140, point3.y + 5, 60, 30); g2.drawString("退出", point3.x + 20 + 140, point3.y + 25); } // 双缓冲 g.drawImage(buff, 0, 0, this); } // 调节功能框位置的方法 public void action() { if (point2.x <= width - 200 && point2.y < height - 35) { point3.x = point2.x; point3.y = point2.y; } else if (point.x >= 200 && point.y >= 35) { point3.x = point.x; point3.y = point.y - 50; } else if (point.x <= 200 && point2.x >= width - 200 && point.y >= 35) { point3.x = point2.x - 205; point3.y = point.y - 50; } else if (point.y >= 35 && point2.y <= height - 35 && point2.x >= width - 200) { point3.x = point2.x; point3.y = point2.y; } else { point3.x = point2.x - 205; point3.y = point.y; } } public void confirmArea() { int temp; point.x = point3.x; // 每一次开始都是和原点坐标比较 point.y = point3.y; if (point2.x < point.x && point2.y < point.y) { temp = point.x; point.x = point2.x; point2.x = temp; temp = point.y; point.y = point2.y; point2.y = temp; } else if (point2.x < point.x) { temp = point.x; point.x = point2.x; point2.x = temp; } else if (point2.y < point.y) { temp = point.y; point.y = point2.y; point2.y = temp; } } public void actoinCut(MouseEvent e) // 操作功能框的方法 { if (isEndCut) { // 完成 if (e.getX() >= point3.x && e.getX() <= point3.x + 60 && e.getY() >= point3.y + 5 && e.getY() <= point3.y + 35) { // //将截好的图保存起来 原理是利用点下完成的“按钮”时的坐标 即是最后一次决定的选区 对图片进行截图保存 try { ImageIO.write(bufferedImage.getSubimage(point.x, point.y, Math.abs(point2.x - point.x), Math.abs(point2.y - point.y)), "jpg", new File("D:/D.jpg")); } catch (IOException e1) { // // TODO Auto-generated catch block e1.printStackTrace(); } ; System.exit(0); // 保存完毕马上退出 这里的保存够工作有点简单因为只是用来测试此截图工具的bug // 具体的功能先不实现先 } // 重截 else if (e.getX() >= point3.x + 70 && e.getX() <= point3.x + 70 + 60 && e.getY() >= point3.y + 5 && e.getY() <= point3.y + 35) { isEndCut = false; // 重新截图 一切进入初始状态 这个 重截一直搞不好 求大神 isStarCut = false; // 点击重截后鼠标依然保持手型样式 所以要恢复默认 setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); // 重绘 repaint(); } // 退出 else if (e.getX() >= point3.x + 140 && e.getX() <= point3.x + 140 + 60 && e.getY() >= point3.y + 5 && e.getY() <= point3.y + 35) { System.exit(0); } } } public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub if (e.getButton() == MouseEvent.BUTTON3) // 双击 右键退出程序 { if (e.getClickCount() == 2) System.exit(0); } } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub // 只有当初始化状态才生效 if (isStarCut == false && isEndCut == false && e.getButton() == MouseEvent.BUTTON1) { point.x = e.getX(); point.y = e.getY(); point3.x = e.getX(); point3.y = e.getY(); isStarCut = true; } // 进入重截的条件 else if (isEndCut) { this.actoinCut(e); } } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub // 截图开始生效 if (isStarCut && isEndCut == false && e.getButton() == MouseEvent.BUTTON1) { isEndCut = true; // 鼠标一放开马上标记截图结束 isStarCut = false; // 重新标记未开始选区状态 repaint();// 重绘 } } @Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub // 拖动是改变矩形的坐标点 if (isStarCut || isEndCut) { point2.x = e.getX(); point2.y = e.getY(); repaint(); } } public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub // 在功能框上显示手型状态 if (isEndCut) { // 完成 if (e.getX() >= point3.x && e.getX() <= point3.x + 60 && e.getY() >= point3.y + 5 && e.getY() <= point3.y + 35) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } // 重截 else if (e.getX() >= point3.x + 70 && e.getX() <= point3.x + 70 + 60 && e.getY() >= point3.y + 5 && e.getY() <= point3.y + 35) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } // 退出 else if (e.getX() >= point3.x + 140 && e.getX() <= point3.x + 140 + 60 && e.getY() >= point3.y + 5 && e.getY() <= point3.y + 35) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } else { setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } } } }
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在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.统一的接
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
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。 1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。 2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。 3、它的左右子树也分别可以充当为二叉查找树。 例如: 例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...
“狗屁不通文章生成器”登顶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 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
《C++ Primer》学习笔记(六):C++模块设计——函数
专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.csdn.net/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第6章 - C++模块设计——函数 文章目录专栏C+...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法不过,当我看了源代码之后这程序不到50
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
相关热词 如何提升c#开发能力 矩阵乘法c# c#调用谷歌浏览器 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天
立即提问