java问题,以下的代码是关于“在jtable中添加按钮”的代码,其中的这句话(如下)是什么意思呢?

package home;

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

import javax.swing.JTable;

import javax.swing.table.TableCellRenderer;

public class JTableButton implements TableCellRenderer

{

private JPanel panel;

private JButton button;  

private JFrame frame ;

public JTableButton()  
{  
    initButton();  

    panel = new JPanel();  
    // panel使用绝对定位,这样button就不会充满整个单元格。  
    panel.setLayout(null);  
    // 添加按钮。  
    panel.add(this.button);  

    frame = new JFrame () ;
    frame.add(this.panel) ;
    frame.setVisible(true) ;
    frame.setPreferredSize(new Dimension(500,500)) ;
    frame.pack() ; 
}  

private void initButton()  
{  
    button = new JButton("aaa");  

    // 设置按钮的大小及位置。  
    button.setBounds(0, 0, 50, 15);  

    // 在渲染器里边添加按钮的事件是不会触发的  
    // this.button.addActionListener(new ActionListener()  
    // {  
    //  
    // public void actionPerformed(ActionEvent e)  
    // {  
    // // TODO Auto-generated method stub  
    // }  
    // });  

}  


public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,  
        int column)  
{  
    // 只为按钮赋值即可。也可以作其它操作,如绘背景等。  
    button.setText(value == "" ? "" : String.valueOf(value));  

    return panel;  
}  

public static void main (String [] args)
{
    new JTableButton () ;
}

}

button.setText(value == "" ? "" : String.valueOf(value)); 就是这一句,里面的那一大行是什么意思呢?我大概理解成返回value的字符串表示形式,但是 value==“”?“”这里面如果写入字符串又没有用啊。。如果我想往按钮里面添加字,那么只有在JButton构造方法里面添加,所以这句话有什么用呢?

2个回答

首先,你是对的,中间的value==操作是一个三目运算,即问号表达式;
其次,这句代码其实是在给button设置显示的文本值的,就是按钮上的文字,而panel.add(this.button); 才是添加按钮的操作,注释掉这行就不会被添加到Panel中了。

我已经明白了这是一个问号表达式,但是我又有另外一个问题,如果我把这句话删除,那么按钮一样被加到了panel上面。
那么为什么呢?为什么按钮会被加上去呢?这个重写方法中只有一个return panel,难道这句话有什么玄机吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java中如何根据我点击的按钮呈现不同的JTable样式(一个JFrame中)?

我现在的需求是,通过点击上面不同的按钮,下方出现对应的表格。 ![界面](https://img-ask.csdn.net/upload/201704/28/1493348600_808384.png) 界面程序代码:首先初始化了一个表格 ``` // 图表窗口 public void tableInformation() { JPanel toolBar = new JPanel(); toolBar.add(this.loadFileBtn); toolBar.add(this.transferBtn); toolBar.add(this.selectBtn); toolBar.add(this.functionNumBtn); toolBar.add(this.scoreBtn); toolBar.add(this.noScoreBtn); this.add(toolBar, BorderLayout.NORTH); this.loadFileBtn.addActionListener(this); this.transferBtn.addActionListener(this); this.selectBtn.addActionListener(this); this.functionNumBtn.addActionListener(this); this.scoreBtn.addActionListener(this); this.noScoreBtn.addActionListener(this); this.tableModel = new DefaultTableModel(new UserList().userInfo, new UserList().titles); this.table = new JTable(this.tableModel); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setPreferredScrollableViewportSize(new Dimension(150, 0)); table.getTableHeader().setReorderingAllowed(false); table.enable(false); JScrollPane scr = new JScrollPane(this.table); this.add(scr, BorderLayout.CENTER); this.remove(scr); // while (this.tableModel.getRowCount() > 0) { this.tableModel.removeRow(this.tableModel.getRowCount() - 1); } } ``` 现在我想做的是:当点击“统计操作数”按钮时,会出现另一个表格样式 按钮代码: ``` else if (e.getSource() == this.functionNumBtn) { //这里如何写? } ``` 补充数据源代码: ``` class UserList extends AbstractTableModel { public String[] titles = { "username", "udate", "utime", "tcode" }; public Object[][] userInfo = {}; // public int getRowCount() { return 0; } public int getColumnCount() { return 0; } // @Override public Object getValueAt(int arg0, int arg1) { return null; } } ``` 请教如何做?(代码中的空格部分)

JAVA JTable 中触发JComboBox导致子窗口会到父窗口后面

各位大神: 本人在JTable中添加了JComboBox控件,通过一个按钮去触发子界面,如果在JTable中触发了JComboBox控件就会导致需要弹出的子窗口不能在最前面一直在父窗口的后面。如果没有去触发JComboBox控件,则弹出的子窗口会在最前面。 代码如下: JComboBox控件在JTable中添加方式: JComboBox isJTCombox = new JComboBox() isJTCombox.addItem(""); isJTCombox.addItem("是"); isJTCombox.addItem("否"); //String[] item = new String[]{"","是","否"}; table.getColumnModel().getColumn(23).setCellEditor( new DefaultCellEditor(isJTCombox)); JTable生成方式 tableModel = new DefaultTableModel(obj, tableHeader); table = new JTable(tableModel); 按钮JButton生成方式及调用子界面方法 fenButton.addActionListener(this); public void actionPerformed(ActionEvent arg0) { if (arg0.getSource() == fenButton) { Display display = Display.getCurrent(); if (display == null) { display = Display.getDefault(); } display.asyncExec(new Runnable() { @Override public void run() { NewDialog dialog = new NewDialog(shell); dialog.open() } }); } } 子界面代码(注:子界面必须要继承Dialog) public class NewDialog extends Dialog { public NewDialog(Shell shell) { super(shell); } protected Control createDialog(Composite parent) { Composite container1 = (Composite) super.createDialogArea(parent); } }

JTable动态增加一行

不常用swing,感觉很陌生.希望大家帮帮忙. 用JTable显示数据库里一个表的信息,有按钮"增加",按下后在表格的最后增加一行,可以往上填数据,然后点击"保存",保存到数据库,也可以选择一行进行编辑,点"保存"保存到数据库.现在我点"增加"按钮后可以增加一行,但是往上填数据的时候,填完一格转到另一格后数据就不见了,不知道怎么回事.代码贴出来,可以运行看看,就三个类,如下:(所有的分都给了) //模型 package product; import java.util.ArrayList; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableModel; public class ProductTableModel extends AbstractTableModel { private ArrayList list = new ArrayList(); private String[] column = { "Product Name", "Product Description", "Status" }; public ProductTableModel() { } public ProductTableModel(ArrayList list) { this(); setList(list); } public int getColumnCount() { return column.length; } public int getRowCount() { return list.size(); } public Object getValueAt(int arg0, int arg1) { ProductBean p = (ProductBean) list.get(arg0); return getPropertyValueByCol(p, arg1); } public void addList(int index, ProductBean p) { if (index < 0 || index > list.size() - 1) { list.add(p); fireTableRowsInserted(list.size(), list.size()); } else { list.add(index, p); fireTableRowsInserted(index, index); } } public boolean deleteList(int index) { if (index >= 0 && index < list.size()) { list.remove(index); fireTableRowsDeleted(index, index); return true; } else return false; } public boolean updateList(int index, ProductBean p) { if (index >= 0 && index < list.size()) { list.set(index, p); fireTableRowsUpdated(index, index); return true; } else return false; } public ProductBean getList(int index) { if (index >= 0 && index < list.size()) { return (ProductBean) list.get(index); } else return null; } public ArrayList getList() { return list; } public void setList(ArrayList list) { this.list = list; fireTableDataChanged(); } public String getColumnName(int i) { return column[i]; } public void setColumn(String[] column) { this.column = column; } public Object getPropertyValueByCol(ProductBean p, int col) { switch (col) { case 0: return p.getProduct_name(); case 1: return p.getProduct_desc(); case 2: return p.getProduct_status(); } return null; } public boolean isCellEditable(int row, int column) { return true; } } //主要的显示 package product; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.LinkedList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; public class ProductFrame extends JFrame { private JPanel pnlTop = null; private JLabel lblProductName = null; private JLabel lblProductDesc = null; private JLabel lblProductStatus = null;       private JButton btnAdd = null; private JButton btnDelete = null; private JButton btnUpdate = null; private JScrollPane panTable = null; private JTable tblProduct = null; private ProductTableModel tmdProduct = null; private ArrayList lstProduct = null; public ProductTableModel getTmdProduct() { if (null == tmdProduct) { tmdProduct = new ProductTableModel(lstProduct); return tmdProduct; } return tmdProduct; } public JTable getTblProduct() { if (null == tblProduct) { tblProduct = new JTable(getTmdProduct()); tblProduct.setEnabled(true); tblProduct.setRowSelectionAllowed(true); return tblProduct; } return tblProduct; } public JScrollPane getPanTable() { if (null == panTable) { panTable = new JScrollPane(); panTable.setViewportView(getTblProduct()); return panTable; } return panTable; } public JPanel getPnlTop() { if (null == pnlTop) { pnlTop = new JPanel(); pnlTop.setLayout(new FlowLayout(FlowLayout.CENTER)); pnlTop.add(getLblProductName());                 pnlTop.add(getLblProductDesc()); pnlTop.add(getLblProductStatus()); pnlTop.add(getBtnAdd()); pnlTop.add(getBtnDelete()); pnlTop.add(getBtnUpdate()); return pnlTop; } return pnlTop; } public JLabel getLblProductName() { if (null == lblProductName) { lblProductName = new JLabel("Product Name"); return lblProductName; } return lblProductName; } public JLabel getLblProductDesc() { if (null == lblProductDesc) { lblProductDesc = new JLabel("Product Description"); return lblProductDesc; } return lblProductDesc; } public JLabel getLblProductStatus() { if (null == lblProductStatus) { lblProductStatus = new JLabel("Status"); return lblProductStatus; } return lblProductStatus; } public JButton getBtnAdd() { if (null == btnAdd) { btnAdd = new JButton("添加"); btnAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addProductBean(); } }); return btnAdd; } return btnAdd; } public JButton getBtnDelete() { if (null == btnDelete) { btnDelete = new JButton("删除"); btnDelete.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { deleteProduct(); } }); return btnDelete; } return btnDelete; } public JButton getBtnUpdate() { if (null == btnUpdate) { btnUpdate = new JButton("更新"); btnUpdate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateProduct(); } }); return btnUpdate; } return btnUpdate; } public void addProductBean() { ProductBean p = new ProductBean(); getTmdProduct().addList(getTblProduct().getSelectedRow(), p); } public void updateProduct() { ProductBean p = getTmdProduct().getList( getTblProduct().getSelectedRow()); if (p != null) { getTmdProduct().updateList(getTblProduct().getSelectedRow(), p); } } public void deleteProduct() { getTmdProduct().deleteList(getTblProduct().getSelectedRow()); } public void initData() { lstProduct = new ArrayList(); } public ProductFrame() { initData(); Container c = this.getContentPane(); c.setLayout(new BorderLayout()); c.add(getPnlTop(), BorderLayout.NORTH); c.add(getPanTable(), BorderLayout.CENTER); this.setSize(new Dimension(800, 600)); this.setVisible(true); } public static void main(String[] args) { new ProductFrame(); } } //产品类 package product; public class ProductBean { private String product_name; private String product_desc; private String product_status; public String getProduct_name() { return product_name; } public void setProduct_name(String product_name) { this.product_name = product_name; } public String getProduct_desc() { return product_desc; } public void setProduct_desc(String product_desc) { this.product_desc = product_desc; } public String getProduct_status() { return product_status; } public void setProduct_status(String product_status) { this.product_status = product_status; } }

java swing的JTable中的某一列加入下拉复选框,选择的多个数据显示在单元格

java swing的JTable中的某一列加入下拉复选框, 点击单元格,出现下拉框,选择的多个数据显示在单元格? 效果图如下所示: ![图片说明](https://img-ask.csdn.net/upload/201901/25/1548384695_331151.png)

关于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); } } ```

如何利用jtable删除数据库一条信息

public class userinfo { private String USERACCOUNT; private String USERNAME; private String NICKNAME; private String PASSWORD; private int SEX; private String PHONE; private String EMAIL; private String REGION; private String MYINFO; private String HEADPIC; private int DEPTID; public userinfo(){} public userinfo(String USERACCOUNT,String USERNAME,String NICKNAME,String PASSWORD,int SEX,String PHONE, String EMAIL, String REGION,String MYINFO,String HEADPIC,int DEPTID) { this.USERACCOUNT=USERACCOUNT; this.USERNAME=USERNAME; this.NICKNAME=NICKNAME; this.PASSWORD=PASSWORD; this.SEX=SEX; this.PHONE=PHONE; this.EMAIL=EMAIL; this.REGION=REGION; this.MYINFO=MYINFO; this.HEADPIC=HEADPIC; this.DEPTID=DEPTID; } public String getUSERACCOUNT(){ return USERACCOUNT; } public void setUSERACCOUNT(String USERACCOUNT){ this.USERACCOUNT=USERACCOUNT; } public String getUSERNAME(){ return USERNAME; } public void setUSERNAME(String USERNAME){ this.USERNAME=USERNAME; } public String getNICKNAME(){ return NICKNAME; } public void setNICKNAME(String NICKNAME){ this.NICKNAME=NICKNAME; } public String getPASSWORD(){ return PASSWORD; } public void setPASSWORD(String PASSWORD){ this.PASSWORD=PASSWORD; } public int getSEX(){ return SEX; } public void setSEX(int SEX){ this.SEX=SEX; } public String getPHONE(){ return PHONE; } public void setPHONE(String PHONE){ this.PHONE=PHONE; } public String getEMAIL(){ return EMAIL; } public void setEMAIL(String EMAIL){ this.EMAIL=EMAIL; } public String getREGION(){ return REGION; } public void setREGION( String REGION){ this.REGION=REGION; } public String getMYINFO(){ return MYINFO; } public void setMYINFO(String MYINFO){ this.MYINFO=MYINFO; } public String getHEADPIC(){ return HEADPIC; } public void setHEADPIC(String HEADPIC){ this.HEADPIC=HEADPIC; } public int getDEPTID(){ return DEPTID; } public void setDEPTID(int DEPTID){ this.DEPTID=DEPTID; } void show(){ System.out.print( USERACCOUNT+" "+USERNAME+" "+NICKNAME+" "+PASSWORD+" "+SEX+" "+PHONE+" "+ EMAIL+" "+REGION+" "+MYINFO+" "+HEADPIC+" "+DEPTID+" "+"\n"); } } public void delete(userinfo u){ Connection con=BaseDAO.getConnection(); try{ String sql ="delete from t_UserInfo where USERACCOUNT=? and USERNAME=? and NICKNAME=? and PASSWORD=? and SEX=? and PHONE=? and EMAIL=? and REGION=? and MYINFO=? and HEADPIC=? and DEPTID=? "; PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setString(1,u.getUSERACCOUNT() ); pstmt.setString(2, u.getUSERNAME()); pstmt.setString(3, u.getNICKNAME()); pstmt.setString(4, u.getPASSWORD()); pstmt.setInt(5, u.getSEX()); pstmt.setString(6, u.getPHONE()); pstmt.setString(7, u.getEMAIL()); pstmt.setString(8, u.getREGION()); pstmt.setString(9, u.getMYINFO()); pstmt.setString(10, u.getHEADPIC()); pstmt.setInt(11, u.getDEPTID()); int num=pstmt.executeUpdate(); if(num>0){ System.out.println("删除成功"); }else{ System.out.println("删除失败"); } BaseDAO.closeStatement(pstmt); BaseDAO.closeConnection(con); }catch(Exception e){ e.printStackTrace(); } } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } 在jbutton2中添加什么样的代码才能实现鼠标选中jtable中的一行的时候点击删除,直接删除,而且连同数据库的一起删除![图片说明](https://img-ask.csdn.net/upload/201601/05/1451984879_753791.png)

Java swing 表格每行后嵌入删除按钮,点击按钮删除该行,但点击按钮所有行删剩最后一行时报错,如何解决?

![图片说明](https://img-ask.csdn.net/upload/201908/03/1564815909_864409.jpg) ``` package mytest; import java.awt.Component; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.table.*; import org.jfree.xml.generator.ModelBuilder; public class T extends JFrame{ private static final long serialVersionUID = 1L; static JTable table = null; static DefaultTableModel model=null; static JScrollPane js=null ; public T(){ model = new DefaultTableModel( new String[] { "课程名","教师","学分","学时","课程类别","课程性质","上课地点","上课时间","余量","" },2 ); table = new JTable(model); table.getColumnModel().getColumn(9).setCellEditor(new MyRender());//设置编辑器 table.getColumnModel().getColumn(9).setCellRenderer(new MyRender() ); js = new JScrollPane(table); this.add(js); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); this.setSize(399, 300); this.setLocationRelativeTo(null); } public static void main(String[] args) { // TODO Auto-generated method stub new T(); } } //渲染 器 编辑器 class MyRender extends AbstractCellEditor implements TableCellRenderer,ActionListener, TableCellEditor{ private static final long serialVersionUID = 1L; private JButton button =null; public MyRender(){ button = new JButton("删除"); button.addActionListener(this); } @Override public Object getCellEditorValue() { // TODO Auto-generated method stub return null; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // TODO Auto-generated method stub return button; } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub int row = T.table.getSelectedRow(); if(row != -1){ T.model.removeRow(row); } } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { // TODO Auto-generated method stub return button; } ```

java中按钮添加addActionListener后没有效果

各位大侠, 对按钮添加事件监听后,点击按钮想将文本框中的“123”改为“456”,可为什么没有变化呢?代码如下: ``` package test2; 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.JTextField; public class ClickAdd extends JFrame { private JPanel panel; private JButton button; private JTextField field; public static void main(String[] args) { ClickAdd frame = new ClickAdd(); frame.setVisible(true); } public ClickAdd() { init(); addActionListener(); } private void addActionListener() { button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { change(); } }); } private void init() { panel = new JPanel(); button = new JButton("添加"); String string = "123"; field = new JTextField(string); panel.add(field); panel.add(button); this.setSize(100, 100); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(panel); } private void change() { String string = "456"; field = new JTextField(string); } } ``` 而如果把change()中的field = new JTextField(string)改成field.setText(string)就可以了呢?

关于JTable渲染器Renderer的问题,求高手解答!!!!

``` public class MyButtonRender implements TableCellRenderer { private JPanel panel; private JButton add,reduce; private JTextField numbertf; public MyButtonRender() { this.initAdd(); this.initReduce(); this.initNumbertf(); this.initPanel(); // 添加按钮 this.panel.add(this.add); this.panel.add(this.numbertf); this.panel.add(this.reduce); } private void initAdd() { this.add = new JButton("+"); // 设置按钮的大小及位置。 this.add.setBounds(0, 0, 41, 20); } private void initReduce(){ this.reduce = new JButton("-"); // 设置按钮的大小及位置。 this.reduce.setBounds(82, 0, 41, 20); } private void initNumbertf(){ this.numbertf=new JTextField(); this.numbertf.setBounds(42,0,30,20); } private void initPanel() { this.panel = new JPanel(); // panel使用绝对定位,这样button就不会充满整个单元格。 this.panel.setLayout(null); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return this.panel; } } ``` 这是我渲染器的代码,就是在一个单元格内添加两个按钮和一个文本框 ``` public class AllTableModel extends AbstractTableModel{ private static final long serialVersionUID = 1L; protected Vector content=null; private String[] title_name = { "编号", "名称", "型号","数量"}; public void addRow(String ID, String name,String model,JPanel number) { Vector v = new Vector(title_name.length); v.add(0,ID); v.add(1,name); v.add(2, model); v.add(3,number); content.add(v); } //需要子类自行提供addRow方法 public AllTableModel(){ content = new Vector(); } public AllTableModel(int count){ content = new Vector(count); } public void removeRow(int row) { content.remove(row); } public void removeRows(int row, int count) { for (int i = 0; i < count; i++) { if (content.size() > row) { content.remove(row); } } } public int getColumnCount() { String[] inherit=getTitlename(); return inherit.length; } public int getRowCount() { return content.size(); } public Object getValueAt(int row, int col) { return ((Vector) content.get(row)).get(col); } public String getColumnName(int col) { String[] inherit=getTitlename(); return inherit[col]; } public void setValueAt(Object value, int row, int col) { ((Vector) content.get(row)).remove(col); ((Vector) content.get(row)).add(col, value); this.fireTableCellUpdated(row, col); } public boolean isCellEditable(int rowIndex, int columnIndex) { if (columnIndex == 0) { return false; } return true; } //需要在子类中定义自己的getTitlename方法 public String[] getTitlename(){ return title_name; } } ``` 这是我的TableModel的代码 我想问为什么我用DefaultTableModel,然后用两个数组初始化,就可以显示出来渲染器的效果,但是要是用自己写的TableModel,然后调用addRow方法添加,表格中就什么也不显示,这是为什么?

通过JAVA按钮事件更新数据库内数据,同时动态的刷新窗口内显示的数据

public class Buy extends JPanel implements ActionListener { Connection conn; Statement stmt; ResultSet rs; String DBDRIVER ="com.microsoft.sqlserver.jdbc.SQLServerDriver"; String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=高铁动车售票系统"; String userName = "sa"; String userPwd = "123456"; private JSplitPane jsp1 =new JSplitPane(JSplitPane.VERTICAL_SPLIT,true); private JPanel jp2 =new JPanel(); private JButton jb2 =new JButton("确定"); private JLabel jl3 =new JLabel("请输入要买的车票编号:"); private JTextField jtxt3 =new JTextField(); public void connDB() { //连接数据库方法 try { conn=DriverManager.getConnection(dbURL,userName,userPwd); stmt=conn.createStatement(); }catch(Exception e) { e.printStackTrace(); System.out.println("连接失败!"); } } public void closeDB() { //关闭数据库方法 try { rs.close(); stmt.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); } } public boolean searchticketno(String str) { boolean x=false; this.connDB(); try { rs=stmt.executeQuery("select * from 车票信息表"); while(rs.next()) { if(rs.getString("车票编号").trim().equals(str)) { //在java中,判断字符串是否相同,一定要使用equals函数!!!!!!!! x=true; } } }catch(Exception e) { e.printStackTrace(); } return x; } Vector<String> head =new Vector<String>(); { head.add("车票编号"); head.add("车次"); head.add("座位等级"); head.add("票价"); head.add("座位号"); head.add("出发站"); head.add("目的站"); head.add("出发时间"); head.add("到站时间"); head.add("余票数量"); } DataBase db= new DataBase(); Vector row =db.getdata(); DefaultTableModel dtm =new DefaultTableModel(row,head); JTable jt =new JTable(dtm); JScrollPane jspn =new JScrollPane(jt); public Buy() { this.setLayout(new GridLayout(1,1)); jsp1.setTopComponent(jp2); jsp1.setBottomComponent(jspn); jsp1.setDividerLocation(80); jsp1.setDividerSize(4); jp2.setLayout(null); jb2.setBounds(400,30,60,20); jp2.add(jb2); jb2.addActionListener(this); jl3.setBounds(60, 30, 160, 20); jp2.add(jl3); jtxt3.setBounds(200, 30, 100, 20); jp2.add(jtxt3); this.add(jsp1); this.setBounds(10, 10, 800, 600); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jb2) { //判定文本框内容,车票信息改变,余票数量-1,乘客购票成功 if(!searchticketno(jtxt3.getText().trim())) { JOptionPane.showMessageDialog(null,"对不起,车票编号不存在!请重新输入!"); jtxt3.setText(""); } else { //未实现的功能 } } } } ``` public class DataBase { private final static String URL = "jdbc:sqlserver://localhost:1433; DatabaseName=高铁动车售票系统"; private static final String USER="sa"; private static final String PASSWORD="123456"; private Vector<Object> row =new Vector() ; private Vector rowsdata =new Vector(); private static Connection conn=null; //静态代码块(将加载驱动、连接数据库放入静态块中) static{ try { //1.加载驱动程序 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //2.获得数据库的连接 conn=(Connection)DriverManager.getConnection(URL,USER,PASSWORD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } //对外提供一个方法来获取数据库连接 public static Connection getConnection(){ return conn; } //测试用例 // public static void main(String[] args) throws Exception // { // // //3.通过数据库的连接操作数据库,实现增删改查 // Statement stmt = conn.createStatement(); // //ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。 // ResultSet rs = stmt.executeQuery("select 车票编号,车次,座位等第,票价,座位号,出发站,目的站,出发时间,到站时间,余票数量 from 车票信息表"); // while(rs.next()){//如果对象中有数据,就会循环打印出来 // System.out.println(rs.getString("车票编号")+","+rs.getString("车次")+","+rs.getString("座位等第")+","+rs.getString("票价")+","+rs.getString("座位号")+","+rs.getString("出发站")+","+rs.getString("目的站")+","+rs.getString("出发时间")+","+rs.getString("到站时间")+","+rs.getString("余票数量")); // } // } public Vector getdata() { try{ //3.通过数据库的连接操作数据库,实现增删改查 Statement stmt = conn.createStatement(); //ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。 ResultSet rs = stmt.executeQuery("select * from 车票信息表"); while(rs.next()){//如果对象中有数据,就会循环打印出来 row.add(rs.getString("车票编号")); row.add(rs.getString("车次")); row.add(rs.getString("座位等第")); row.add(rs.getString("票价")); row.add(rs.getString("座位号")); row.add(rs.getString("出发站")); row.add(rs.getString("目的站")); row.add(rs.getString("出发时间")); row.add(rs.getString("到站时间")); row.add(rs.getString("余票数量")); rowsdata.add(row); row=new Vector(); }}catch(SQLException e) { e.printStackTrace(); return null; } return rowsdata; } } ``` ![图片说明](https://img-ask.csdn.net/upload/201906/25/1561473164_888693.png) ``` 希望最后的结果就是在文本框内输入车票编号,然后检索数据库,有对应车票编码的车票就显示购票成功,同时刷新当前显示的数据表,更新余票数量。 ```

swing jtable

给一个按钮添加监听器,单击后就会选中jtable的最后一行,我通过下面的代码实现了 [code="java"] llast.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(e.getActionCommand().equals("last")){ int index = table.getRowCount(); table.getSelectionModel().setSelectionInterval(index-1,index-1); } } });[/code] 由于jtable是放在一个JScrollPane中选择中,点击按钮后只有向下拉动滚动条才能看到选中的记录,问一下能不能选中后焦点直接跳到选中行。

java中为什么控件不显示出来

代码如下 ``` import java.awt.Container; import java.awt.EventQueue; import java.awt.GridLayout; import java.net.URL; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; public class Snake extends JFrame{ private JPanel jp; private Icon icon; private JLabel[] num; private URL url1; private URL url2; /** * */ private static final long serialVersionUID = -7453810388329378685L; public static void main(String[] args){ new Snake(); } public Snake(){ url1=Snake.class.getResource("hollowsquare.png"); url2=Snake.class.getResource("solidsquare.png"); Container c=getContentPane(); num=new JLabel[10000]; setResizable(false); //不允许更改大小 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 500, 500); setVisible(true); setLayout(new GridLayout(100,100,0,0)); for(int i=0;i<10000;i++){ icon=new ImageIcon(url2); System.out.println("running"+i); num[i].setSize(5, 5); num[i].setIcon(icon); num[i].setVisible(true); c.add(num[i]); } } } ```

怎么勾选复选框然后点击删除按钮删除数据库里的数据Java Swing

先勾选了复选框,又点击删除按钮,但是删不了那一行的数据。我是通过Java语句删除数据库里的数据的

Jtable设置指定行的背景颜色

我不是要那种交替换背景颜色,我只是要选中一行,只更换那一行的背景颜色,比如设置一个按钮,鼠标选中一行后,按下按钮,那一行就会变背景颜色,只是那一行才会!

各位大神,请问我用可视化java GUI建了个表格,如何才能将数据输入表格后点击保存将数据存入数据库呢?我用的是NetBeans IDE,数据库用的JavaDB

![图片说明](https://img-ask.csdn.net/upload/202004/03/1585902004_205359.png) ``` package used_car; import bean.BASIC_INFORMATIONBean; import java.util.ArrayList; import java.sql.Statement; import java.sql.Timestamp; import java.sql.SQLException; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import java.sql.ResultSet; /** * * @author Mechrevo */ public class 新建JFrame extends javax.swing.JFrame { ArrayList changedScore; /** * Creates new form 新建JFrame */ public 新建JFrame() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { used_carPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("used_carPU").createEntityManager(); basicInformationQuery = java.beans.Beans.isDesignTime() ? null : used_carPUEntityManager.createQuery("SELECT b FROM BasicInformation b"); basicInformationList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : basicInformationQuery.getResultList(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jPanel1 = new javax.swing.JPanel(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null, null, null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null, null, null, null, null, null} }, new String [] { "VINid", "vehicle_brand", "vehicle_type", "displacement", "transmission_case", "discharge", "vehicle_properties", "vehicle_color", "maintenance", "expiration_of_annual_inspection", "card_time", "expiry_of_commercial_insurance", "maturity_of_compulsory_insurance", "mileage" } )); jScrollPane1.setViewportView(jTable1); jButton1.setText("保存"); jButton1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jButton1MouseClicked(evt); } }); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButton2.setText("上一步"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(578, 578, 578) .addComponent(jButton1) .addGap(154, 154, 154) .addComponent(jButton2) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(26, 26, 26) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton1) .addComponent(jButton2)) .addContainerGap(28, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1264, Short.MAX_VALUE) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) ); pack(); }// </editor-fold> private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(新建JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(新建JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(新建JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(新建JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new 新建JFrame().setVisible(true); } }); } // Variables declaration - do not modify private java.util.List<bean.BasicInformation> basicInformationList; private javax.persistence.Query basicInformationQuery; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; private javax.persistence.EntityManager used_carPUEntityManager; // End of variables declaration } ```

Swing Jtble 排序后,表格数据无法刷新

(源代码文件Test.java在最后已附上) 操作描述: 1.添加 -> 刷新 2.点击表头进行排序 3.清空 -> 刷新 4.刷新按钮失效,会报错,如何解决?(如果不点击表头排序,则功能正常) Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 at java.util.Vector.elementAt(Vector.java:470) at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649) at javax.swing.JTable.getValueAt(JTable.java:2720) at javax.swing.JTable.prepareRenderer(JTable.java:5718) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:778) at javax.swing.JComponent.paint(JComponent.java:1054) at javax.swing.JComponent.paintChildren(JComponent.java:887) at javax.swing.JComponent.paint(JComponent.java:1063) at javax.swing.JViewport.paint(JViewport.java:731) at javax.swing.JComponent.paintChildren(JComponent.java:887) at javax.swing.JComponent.paint(JComponent.java:1063) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221) at javax.swing.RepaintManager.paintDoubleBuffered(RepaintManager.java:1482) at javax.swing.RepaintManager.paint(RepaintManager.java:1413) at javax.swing.RepaintManager.paint(RepaintManager.java:1206) ......

jsp输出中增加复选框实现批量删除

jsp页面布局和执行程序在同一个页面,现在希望给每条提交的信息加上复选框,批量删除,求具体代码和解决方法,大恩不言谢。

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

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

实现简单的文件系统

实验内容: 通过对具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 要求: 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简

MIPS单周期CPU-组成原理实验-华中科技大学

使用logisim布线完成的MIPS单周期CPU,可支持28条指令。跑马灯的代码已经装入了寄存器,可以直接开启时钟运行。

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

基于QT和OpenCV的五子棋实现源码

一个简单的五子棋应用,基于QT和OpenCV的实现源码,通过相邻棋子判断是否获胜,不包含人工智能算法,适合新手入门

Git 实用技巧

这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。

实用主义学Python(小白也容易上手的Python实用案例)

原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

JAVA初级工程师面试36问(完结)

第三十一问: 说一下线程中sleep()和wait()区别? 1 . sleep()是让正在执行的线程主动让出CPU,当时间到了,在回到自己的线程让程序运行。但是它并没有释放同步资源锁只是让出。 2.wait()是让当前线程暂时退让出同步资源锁,让其他线程来获取到这个同步资源在调用notify()方法,才会让其解除wait状态,再次参与抢资源。 3. sleep()方法可以在任何地方使用,而wait()只能在同步方法或同步块使用。 ...

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

智鼎(附答案).zip

并不是完整题库,但是有智鼎在线2019年9、10、11三个月的试题,有十七套以上题目,普通的网申行测题足以对付,可以在做题时自己总结一些规律,都不是很难

Visual Assist X 破解补丁

vs a's'sixt插件 支持vs2008-vs2019 亲测可以破解,希望可以帮助到大家

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

JavaWEB商城项目(包括数据库)

功能描述:包括用户的登录注册,以及个人资料的修改.商品的分类展示,详情,加入购物车,生成订单,到银行支付等!另外还有收货地址的和我的收藏等常用操作.环境(JDK 1.7 ,mysql 5.5,Ecli

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

一学即懂的计算机视觉(第一季)

图像处理和计算机视觉的课程大家已经看过很多,但总有“听不透”,“用不了”的感觉。课程致力于创建人人都能听的懂的计算机视觉,通过生动、细腻的讲解配合实战演练,让学生真正学懂、用会。 【超实用课程内容】 课程内容分为三篇,包括视觉系统构成,图像处理基础,特征提取与描述,运动跟踪,位姿估计,三维重构等内容。课程理论与实战结合,注重教学内容的可视化和工程实践,为人工智能视觉研发及算法工程师等相关高薪职位就业打下坚实基础。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/26281 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,但是大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 下载方式:电脑登录https://edu.csdn.net/course/detail/26281,点击右下方课程资料、代码、课件等打包下载

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

课程主要面向嵌入式Linux初学者、工程师、学生 主要从一下几方面进行讲解: 1.linux学习路线、基本命令、高级命令 2.shell、vi及vim入门讲解 3.软件安装下载、NFS、Samba、FTP等服务器配置及使用

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

快速入门Android开发 视频 教程 android studio

这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

相关热词 c#中如何设置提交按钮 c#帮助怎么用 c# 读取合并单元格的值 c#带阻程序 c# 替换span内容 c# rpc c#控制台点阵字输出 c#do while循环 c#调用dll多线程 c#找出两个集合不同的
立即提问