java 中用defaulttablemodel 给JTable制作表头

大家好,本人小白一名,在看书的时候遇到了操作不出效果的,想请教一下大家伙:
我想给JTable添加表头,用到了DefaultTableModel。
教材的例子是这样来实现的(其他部分省略了):

tabletest = new JTable();
//定义列名
 String[]names={"星期一","星期二","星期三","星期四","星期五","星期六","星期七"};
 DefaultTableModel model = new DfaultTableModel(names,15);
 tabletest.setModel(model);

我发现运行出来的效果是没有表头的,也没有任何的错误信息,如下:

图片说明

当我去翻了DefaualtTableModel的中文文档后,发现,这种写法,是获取names的数量作为列的数量,没有设置表头。

于是我换用DefaultTableModel(内容,表头)的方式,如下:

tabletest = new JTable();
//定义列名
 String[]names={"星期一","星期二","星期三","星期四","星期五","星期六","星期七"};
 String[][]content=new String[15][7];
 DefaultTableModel model = new DfaultTableModel(content,names);
 tabletest.setModel(model);

最后运行的效果图和之前的是一样的,均没有表头。
但是,在eclipse上,JTable控件的model属性中,是这样的:
图片说明

想请教一个各位大大,这种运行结果没表头,也没报错,是我哪儿没有设置对,让表头显示出来么?
十分谢谢~
希望能找到这种显示的原因~

2个回答

这篇文章的第二个问题

这是将JTalbe置于ScrollPane容器下的代码

  JTable table = new JTable (data, columnNames);
   f.add(new JScrollPane(table))

问题已经解决。
给的实例,讲的是,在滚动面板中添加JTable控件,我没给添加滚动面板。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为什么java显示数据库连接成功但是却显示不出表
![图片说明](https://img-ask.csdn.net/upload/201911/19/1574175022_893822.png) 代码如下: ``` Vector rowData,columnNames; columnNames = new Vector(); rowData = new Vector(); columnNames.add("学号"); columnNames.add("学生姓名"); columnNames.add("性别"); columnNames.add("出生日期"); columnNames.add("班级"); columnNames.add("学院"); columnNames.add("年级"); try { connect_sql consql = new connect_sql();//创建对象 Connection conn = consql.getConnection();//链接数据库 try { Statement sta = conn.createStatement();//创建sql语句的接口 ResultSet result = sta.executeQuery("select*from student");//result接受语句选中student表 ResultSetMetaData metaData = result.getMetaData();//接受result中的元数据 while(result.next()) { Vector hang = new Vector(); int id = result.getInt(1); String name = result.getString(2); String sex = result.getString(3); String brithday = result.getString(4); String className = result.getString(5); String insititute = result.getString(6); int grade = result.getInt(7); hang.add(id);hang.add(name);hang.add(sex);hang.add(brithday); hang.add(className);hang.add(insititute);hang.add(grade); rowData.add(hang); } } catch(Exception e) { e.printStackTrace(); conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } DefaultTableModel model = new DefaultTableModel(rowData,columnNames); JTable jTable = new JTable(model);//创建表格组件 jTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); jsp.add(jTable); ```
DefaultTableModel表格问题
Java如何往DefaultTableModel表格中添加一行具有不同类型的数据 例如一行数据中有String类型,也有JButton类型
java swing jtable
小弟不才,才学swing [code="java"] /* * MySwingView.java */ package myswing; import org.jdesktop.application.Action; import org.jdesktop.application.ResourceMap; import org.jdesktop.application.SingleFrameApplication; import org.jdesktop.application.FrameView; import org.jdesktop.application.TaskMonitor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; import javax.swing.Icon; import javax.swing.JDialog; import javax.swing.JFrame; /** * The application's main frame. */ public class MySwingView extends FrameView { public MySwingView(SingleFrameApplication app) { super(app); initComponents(); // status bar initialization - message timeout, idle icon and busy animation, etc ResourceMap resourceMap = getResourceMap(); int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout"); messageTimer = new Timer(messageTimeout, new ActionListener() { public void actionPerformed(ActionEvent e) { statusMessageLabel.setText(""); } }); messageTimer.setRepeats(false); int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate"); for (int i = 0; i < busyIcons.length; i++) { busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]"); } busyIconTimer = new Timer(busyAnimationRate, new ActionListener() { public void actionPerformed(ActionEvent e) { busyIconIndex = (busyIconIndex + 1) % busyIcons.length; statusAnimationLabel.setIcon(busyIcons[busyIconIndex]); } }); idleIcon = resourceMap.getIcon("StatusBar.idleIcon"); statusAnimationLabel.setIcon(idleIcon); progressBar.setVisible(false); // connecting action tasks to status bar via TaskMonitor TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext()); taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { String propertyName = evt.getPropertyName(); if ("started".equals(propertyName)) { if (!busyIconTimer.isRunning()) { statusAnimationLabel.setIcon(busyIcons[0]); busyIconIndex = 0; busyIconTimer.start(); } progressBar.setVisible(true); progressBar.setIndeterminate(true); } else if ("done".equals(propertyName)) { busyIconTimer.stop(); statusAnimationLabel.setIcon(idleIcon); progressBar.setVisible(false); progressBar.setValue(0); } else if ("message".equals(propertyName)) { String text = (String)(evt.getNewValue()); statusMessageLabel.setText((text == null) ? "" : text); messageTimer.restart(); } else if ("progress".equals(propertyName)) { int value = (Integer)(evt.getNewValue()); progressBar.setVisible(true); progressBar.setIndeterminate(false); progressBar.setValue(value); } } }); } @Action public void showAboutBox() { if (aboutBox == null) { JFrame mainFrame = MySwingApp.getApplication().getMainFrame(); aboutBox = new MySwingAboutBox(mainFrame); aboutBox.setLocationRelativeTo(mainFrame); } MySwingApp.getApplication().show(aboutBox); } /** 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { mainPanel = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); menuBar = new javax.swing.JMenuBar(); javax.swing.JMenu fileMenu = new javax.swing.JMenu(); javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem(); jMenuItem1 = new javax.swing.JMenuItem(); javax.swing.JMenu helpMenu = new javax.swing.JMenu(); javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem(); statusPanel = new javax.swing.JPanel(); javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator(); statusMessageLabel = new javax.swing.JLabel(); statusAnimationLabel = new javax.swing.JLabel(); progressBar = new javax.swing.JProgressBar(); mainPanel.setName("mainPanel"); // NOI18N jScrollPane1.setName("jScrollPane1"); // NOI18N 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} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } ) { boolean[] canEdit = new boolean [] { false, false, false, true }; public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jTable1.setName("jTable1"); // NOI18N jScrollPane1.setViewportView(jTable1); javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); mainPanel.setLayout(mainPanelLayout); mainPanelLayout.setHorizontalGroup( mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(mainPanelLayout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 555, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); mainPanelLayout.setVerticalGroup( mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(mainPanelLayout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE) .addContainerGap()) ); menuBar.setName("menuBar"); // NOI18N org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(myswing.MySwingApp.class).getContext().getResourceMap(MySwingView.class); fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N fileMenu.setName("fileMenu"); // NOI18N javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(myswing.MySwingApp.class).getContext().getActionMap(MySwingView.class, this); exitMenuItem.setAction(actionMap.get("quit")); // NOI18N exitMenuItem.setName("exitMenuItem"); // NOI18N fileMenu.add(exitMenuItem); jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, java.awt.event.InputEvent.CTRL_MASK)); jMenuItem1.setText("Item"); jMenuItem1.setName("jMenuItem1"); // NOI18N jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { thisClick(evt); } }); fileMenu.add(jMenuItem1); menuBar.add(fileMenu); helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N helpMenu.setName("helpMenu"); // NOI18N aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N aboutMenuItem.setName("aboutMenuItem"); // NOI18N helpMenu.add(aboutMenuItem); menuBar.add(helpMenu); statusPanel.setName("statusPanel"); // NOI18N statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N statusMessageLabel.setName("statusMessageLabel"); // NOI18N statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N progressBar.setName("progressBar"); // NOI18N javax.swing.GroupLayout statusPanelLayout = new javax.swing.GroupLayout(statusPanel); statusPanel.setLayout(statusPanelLayout); statusPanelLayout.setHorizontalGroup( statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(statusPanelSeparator, javax.swing.GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE) .addGroup(statusPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(statusMessageLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 395, Short.MAX_VALUE) .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(statusAnimationLabel) .addContainerGap()) ); statusPanelLayout.setVerticalGroup( statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(statusPanelLayout.createSequentialGroup() .addComponent(statusPanelSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(statusMessageLabel) .addComponent(statusAnimationLabel) .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(3, 3, 3)) ); setComponent(mainPanel); setMenuBar(menuBar); setStatusBar(statusPanel); }// </editor-fold> private void thisClick(java.awt.event.ActionEvent evt) { System.out.println("----------------------------->");//菜单栏事件 } // Variables declaration - do not modify private javax.swing.JMenuItem jMenuItem1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; private javax.swing.JPanel mainPanel; private javax.swing.JMenuBar menuBar; private javax.swing.JProgressBar progressBar; private javax.swing.JLabel statusAnimationLabel; private javax.swing.JLabel statusMessageLabel; private javax.swing.JPanel statusPanel; // End of variables declaration private final Timer messageTimer; private final Timer busyIconTimer; private final Icon idleIcon; private final Icon[] busyIcons = new Icon[15]; private int busyIconIndex = 0; private JDialog aboutBox; } [/code] 如果我想在表格最后一列加个按钮,点击随便触发一个事件,应该如何写?表格的数据用动态生成。
JTable内有数据,但在JScrollPane中只显示表头不显示数据
如题,JTable里有一百条数据,但是怎么都显示不出来,弄了好久,实在弄不出来,跪请大神解答。 ``` public void add(Vector<Vector<Object>> rowData,Vector<String> columnName) { if(this.number < this.countPages) { DefaultTableModel dtm = new DefaultTableModel(rowData, columnName); this.jt[number] = new JTable(dtm) { public boolean isCellEditable(int row, int column) { return false; } }; JTableHeader head = jt[number].getTableHeader(); // 创建表格标题对象 head.setPreferredSize(new Dimension(head.getWidth(), 35));// 设置表头大小 head.setFont(new Font("楷体", Font.PLAIN, 14));// 设置表格字体 Font font = new Font("Menu.font", Font.PLAIN, 12); this.jt[number].setFont(font); this.jt[number].setRowHeight(25); DefaultTableCellRenderer r = new DefaultTableCellRenderer(); r.setHorizontalAlignment(JLabel.CENTER); this.jt[number].setDefaultRenderer(Object.class, r); this.js[number] = new JScrollPane(); this.js[number].setViewportView(jt[number]); this.js[number].setVisible(false); add(js[number], BorderLayout.CENTER); this.number = this.number + 1; } if(number == countPages){ this.js[0].setVisible(true); this.number = 0; } } ```
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); } }
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$PaintManager.paintDoubleBuffered(RepaintManager.java:1482) at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413) at javax.swing.RepaintManager.paint(RepaintManager.java:1206) ...... 整个测试代码文件如下: **Test.java** : package examples; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Vector; public class Test extends javax.swing.JFrame { private Vector<Vector> tblDate; // 表数据 private Vector<String> tblHeaders; // 表头 private List<Integer> list; // 数据源 public Test() { tblDate = new Vector<Vector>(); tblHeaders = new Vector<String>(); list = new ArrayList<Integer>(); tblHeaders.add("编号"); tblHeaders.add("数据"); initComponents(); setLocationRelativeTo(null); } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // 添加 list.add(list.size()); } private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { // 清空 list.clear(); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // 刷新 tblDate.clear(); for (int i : list) { tblDate.add(new Vector(Arrays.asList(i, "测试数据" + i))); } jTable1.repaint(); jTable1.updateUI(); } // 下面都是NetBeans自动生成代码,不要管 public static void main(String args[]) { try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (Exception ex) { // TODO } java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new Test().setVisible(true); } }); } @SuppressWarnings("unchecked") private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setModel(new javax.swing.table.DefaultTableModel( this.tblDate, this.tblHeaders )); jTable1.setAutoCreateRowSorter(true); jScrollPane1.setViewportView(jTable1); jButton2.setText("添加"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jButton3.setText("清空"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jButton1.setText("刷新"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing .GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout .PREFERRED_SIZE, 0, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addGap(0, 168, Short.MAX_VALUE) .addComponent(jButton2) .addGap(18, 18, 18) .addComponent(jButton3) .addGap(18, 18, 18) .addComponent(jButton1))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 190, Short .MAX_VALUE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout .Alignment.BASELINE) .addComponent(jButton1) .addComponent(jButton2) .addComponent(jButton3)) .addContainerGap()) ); pack(); } private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; }
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; } ```
关于Jpanel, JScrollPane ,Jtable嵌套使用的问题
如题,我先建了一个继承了JPanel的 ListAddMainPanel。在这个ListAddMainPanel中,我嵌套了一个JScrollPane类的panel_1,在这个JScrollPane里,我放置了一个Jtable,Jtable 使用了DefaultTableModel。(可能看着有点晕,其实很简单,就是下面的那个图片) 使用时,我是在JFrame里的contentPane里先新建一个底层Panel,然后调用这个ListAddMainPanel的构造函数。想要给Table里加数据时,调用这个ListAddMainPanel里之前写好的fulfillTable函数 菜鸟觉得这个架构理论上应该行得通,但是问题来了,无论我使用什么样的方法,比如addRow();addColumn();setColumnIdentifiers(); 测试显示没有问题,数据也传进去了,程序也没报错,可他的界面就是没有出现表格_(:зゝ∠)_ 换了很多种方法,都没奏效,于是默默来求大佬帮助_(:зゝ∠)_ ![图片说明](https://img-ask.csdn.net/upload/2 ``` package w.teacher; import java.awt.Dimension; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.JTextField; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JComboBox; public class ListAddMainPanel extends JPanel { // private JTable table1,table2,table3,table4,table5; public JLabel timeLabel; public JTable table; public DefaultTableModel tableModel; public JTextField textField; public JComboBox<String> gradeBox; public JButton addButton,importButton; /** * Create the panel. */ public ListAddMainPanel() { setLayout(null); setPreferredSize(new Dimension(856, 417)); setOpaque(false); JScrollPane panel_1 = new JScrollPane(table); panel_1.setBounds(14, 72, 493, 319); panel_1.setLayout(null); panel_1.setVisible(true); add(panel_1); //Table table = new JTable(tableModel); // tableModel = (DefaultTableModel)table.getModel(); // table.setPreferredScrollableViewportSize(new Dimension(493,319));//设置table大小 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//关闭表格列自动调整,此时水平滚动条可见 // table.setBounds(0, 0, 493, 319); panel_1.add(table);//原位置Table代码 table.setVisible(true); // tableModel.setColumnIdentifiers(name1111); panel_1.setViewportView(table);//原位置Table代码 } public void fulfillTable(String[] title,String[][] data) { // for(int i = 0;i<100;i++){ // for(int j = 0;j<7;j++) // System.out.println(data[i][j]); // } // tableModel = new DefaultTableModel(data, name); // table = new JTable(tableModel); if(title!=null) { for(int i = 0;i<title.length;i++) { tableModel.addColumn(title[i]); } } for(int i = 0;data[i+1][0]!=null;i++) { String[] mString = new String[data[i].length]; for(int y = 0;y<7;y++) { mString[y] = data[i][y]; System.out.println(mString[y]); } tableModel.addRow(mString); // System.out.println(mString); } } ```
请问怎么修改我的java程序,才能把list的信息显示在面板上
package sam; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class c extends JFrame{ JTable table; public c(){ JTable jtable=geTable(); getContentPane().add(jtable); this.setVisible(true); } private JTable geTable(){ if(table==null){ table=new JTable(); table.setRowHeight(23); String[] columns={"姓名","性别","出生日期"}; DefaultTableModel model=new DefaultTableModel(columns,0); table.setModel(model); List<String> students=getstudents(); } return table; } private List<String> getstudents(){ List<String> list=new ArrayList<String>(); list.add("张三丰,男,9207"); return list; } public static void main(String[] args) { new c(); } }
myeclipse的jtable为何获取不到数据库的内容
package main; import java.sql.ResultSet; import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.util.Vector; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class DisplayPerson extends javax.swing.JFrame { /** Creates new form display */ public DisplayPerson() { createTableModel(); } private void createTableModel() { JTable JTableView = new JTable(); jScrollPane1 = new javax.swing.JScrollPane(); DefaultTableModel JTableModel = new DefaultTableModel(200,2); JTableModel.addColumn("PersonId"); JTableModel.addColumn("age"); JTableView.setModel(JTableModel); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); JTableView.setModel(new javax.swing.table.DefaultTableModel( new Object[][] { }, new String[] { "PersonId", "age"})); jScrollPane1.setViewportView(JTableView); javax.swing.GroupLayout layout = new javax.swing.GroupLayout( getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(13, Short.MAX_VALUE))); layout.setVerticalGroup(layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); pack(); String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //加载JDBC驱动 String dbURL = "jdbc:sqlserver://127.0.0.1:1433; DatabaseName=student"; String userName = "root"; String userPwd = "123"; Connection dbConn; try { Class.forName(driverName); dbConn = DriverManager.getConnection(dbURL, userName, userPwd); System.out.println("Connection Successful!"); Statement st = dbConn.createStatement(); ResultSet rs = st.executeQuery("select * from Person"); while (rs.next()) { Vector<Integer> vcRows = new Vector<Integer>(); vcRows.addElement(rs.getInt(1)); vcRows.addElement(rs.getInt(2)); // JTableModel.addRow(rs.getInt(1)); //error // JTableModel.addRow(rs.getString(2)); //error JTableModel.addRow(vcRows); //添加一行记录到表格模板中 } //5.关闭连接 rs.close(); st.close(); dbConn.close(); // DBConnection.closeStmtAndCon(); //关闭相关连接 } catch (Exception e) { e.printStackTrace(); } } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new DisplayPerson().setVisible(true); } }); } //GEN-BEGIN:variables // Variables declaration - do not modify private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable JTableView; // End of variables declaration//GEN-END:variables }
java GridBagLayout 表格内容不显示,,而且会自动居中
1. ![图片说明](https://img-ask.csdn.net/upload/201505/13/1431487048_654230.png) 如果不用JScrollPane,布局正常,但是不显示表头 ``` package com.haiersoft.jxc.kcgl.view; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; public class KuCunPanDianPanel extends JPanel{ private JTextField pandianyuan; private JTextField pandianshijian; private JTextField pinzhongshu; //private DefaultTableModel model = new DefaultTableModel(); //private JTable table = new JTable(model); private JScrollPane sp_table; public KuCunPanDianPanel(){ super(); setBounds(10, 10, 460, 300); setLayout(new GridBagLayout()); setVisible(true); setupComponet(new JLabel(" 盘 点 员:"), 0, 0, 1, 0, false); pandianyuan = new JTextField("Tsoft"); // 定位盘点员文本框 setupComponet(pandianyuan, 1, 0, 1, 100, true); setupComponet(new JLabel(" 盘点时间:"), 2, 0, 1, 0, false); pandianshijian = new JTextField("2010-5-18 16:40:41"); // ·定位盘点时间文本框 setupComponet(pandianshijian, 3, 0, 1, 150, true); setupComponet(new JLabel(" 品 种 数:"), 4, 0, 1, 0, false); pinzhongshu = new JTextField("1"); // 定位品种数文本框 setupComponet(pinzhongshu, 5, 0, 1, 100, true); String[] name={"商品名称","商品编号","供应商","产地","单位","规格","单价","数量","包装"}; //String[] columnNames = {"Product","Number of Boxes","Price"}; //Object data[][] = {{ "小芳", "142321" },{ "小芳", "142321" } }; Object[][] data = { {"计算机", "sp1001","小公司","山东青岛","台","",new Double(10000.000), new Integer(10),"箱"}, }; JTable table = new JTable(data,name); //table.setPreferredScrollableViewportSize(new Dimension(300, 80)); //创建一个滚动面板,包含表格 sp_table = new JScrollPane(table); setupComponet(sp_table, 0, 1, 10, 400, true); } private void setupComponet(JComponent component, int gridx, int gridy, int gridwidth, int ipadx, boolean fill) { final GridBagConstraints gridBagConstrains = new GridBagConstraints(); gridBagConstrains.gridx = gridx; gridBagConstrains.gridy = gridy; gridBagConstrains.insets = new Insets(5, 1, 3, 1); if (gridwidth > 1) gridBagConstrains.gridwidth = gridwidth; if (ipadx > 0) gridBagConstrains.ipadx = ipadx; if (fill) gridBagConstrains.fill = GridBagConstraints.HORIZONTAL; add(component, gridBagConstrains); } public void initComboBox() { } } ```
有关JTable按内容排序
TableModel model = new DefaultTableModel(data,columnNames) //{ // public Class getColumnClass(int column) { // Class returnValue; // if ((column >= 0) && (column < getColumnCount())) { // returnValue = getValueAt(0, column).getClass(); // } else { // returnValue = Object.class; // } // return returnValue; // } } ; table = new JTable(model); RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); table.setRowSorter(sorter); 再做一个界面,其中JTable上添加了一些效果,本来是这样的![图片说明](https://img-ask.csdn.net/upload/201503/13/1426236706_916108.png) 后来为了让他实现点击排序,而且要按照内容而非字符串顺序排序,就加入了注释的那段代码,然后界面就这样了。。![图片说明](https://img-ask.csdn.net/upload/201503/13/1426236789_71166.png)求解决。。
Java 学生信息管理系统 求助 为什么会出现nullerror
nullError Exception in thread "main" java.lang.NullPointerException at Student.SQLFrame.getObject(SQLFrame.java:255) at Student.SQLFrame.setTable(SQLFrame.java:287) at Student.SQLFrame.init(SQLFrame.java:226) at Student.SQLFrame.<init>(SQLFrame.java:215) at Student.SQLFrame.main(SQLFrame.java:340) package Student; import java.awt.BorderLayout; import java.awt.Panel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import javax.swing.DefaultCellEditor; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; import Student.Student; import Student.SQLTool; public class SQLFrame extends JFrame implements ActionListener { private JTable mainTab;// 显示学生记录的table private JButton allBtn;// 显示所有学生记/录 private JButton addBtn;// 添加新的学生记录 private JButton findBtn;// 根据姓名查询学生记录 private JButton delBtn;// 根据学号删除学生记录 private SQLTool tool;// 数据库操作类实例 private String[] tableName = { "学号", "姓名", "性别", "成绩", "备注" }; private int width[] = { 70, 60, 50, 80, 50, 140 }; public SQLFrame() { this.setVisible(true); this.setTitle("SimpleSMS"); this.setSize(500, 570); this.setResizable(false);// 设置窗口大小固定 this.setLocationRelativeTo(null);// 设置窗口居中 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); this.init(); initLayout(); } private void init() {// 组件初始化方法 tool = new SQLTool(); ArrayList<Student> stuList = tool.selectAll(); mainTab = new JTable(); setTable(stuList); mainTab.getTableHeader().setReorderingAllowed(false);// 设置Table列不可拖动 mainTab.setEnabled(false);// 设置Table不可编辑 allBtn = new JButton("所有记录"); addBtn.addActionListener(this); addBtn = new JButton("添加记录"); addBtn.addActionListener(this); findBtn = new JButton("查询记录"); findBtn.addActionListener(this); delBtn = new JButton("删除记录"); delBtn.addActionListener(this); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private void initLayout() { Panel btnPal = new Panel(); btnPal.add(allBtn); btnPal.add(addBtn); btnPal.add(findBtn); btnPal.add(delBtn); JScrollPane scroll = new JScrollPane(mainTab); add(scroll, BorderLayout.CENTER); add(btnPal, BorderLayout.SOUTH); } private Object[][] getObject(ArrayList<Student> stuList) { // 将stuList数组转变为Object的二维数组用于插入JTable Object[][] objects = new Object[stuList.size()][6]; for (int i = 0; i < stuList.size(); i++) { for (int j = 0; j < 6; j++) { switch (j) { case 0: objects[i][j] = stuList.get(i).getID(); break; case 1: objects[i][j] = stuList.get(i).getName(); break; case 2: objects[i][j] = stuList.get(i).getSex(); break; case 3: objects[i][j] = stuList.get(i).getClassStr(); break; case 4: objects[i][j] = stuList.get(i).getScore(); break; case 5: objects[i][j] = stuList.get(i).getRemarks(); break; default: break; } } } return objects; } private void setTable(ArrayList<Student> stuList) {// 更新Table数据 Object[][] objects = getObject(stuList); DefaultTableModel model = new DefaultTableModel(objects, tableName); mainTab.setModel(model); for (int i = 0; i < 6; i++) { mainTab.getColumnModel().getColumn(i).setPreferredWidth(width[i]); } } public void actionPerformed(ActionEvent e) { if (e.getSource().equals(allBtn)) { // 显示所有学生信息 setTable(tool.selectAll());// 查询所有学生信息,并在Table中显示出来 } else if (e.getSource().equals(addBtn)) { // 添加新的学生记录 InsertDialog insertDialog = new InsertDialog();// 自定义输入学生信息的对话框 // showInsertDialog方法显示对话框,并将输入的学生信息返回 Student stu = insertDialog.showInsertDialog(); if (stu != null) {// 判断是否有效 // 调用工具类的insert方法插入新的学生信息,并判断是否成功 if (tool.insert(stu)) { setTable(tool.selectAll()); } else { JOptionPane.showMessageDialog(null, "数据添加失败!"); } } } else if (e.getSource().equals(findBtn)) { // 通过姓名查询学生记录 // 弹出对话框让用户输入学生姓名 String nameStr = JOptionPane.showInputDialog("请输入查询学生的姓名:"); ArrayList<Student> stuList = tool.selectByName(nameStr); // 根据学生姓名查询学生记录,并将查询到的学生记录显示到Table中 setTable(stuList); } else { // 通过学号删除学生记录 try { // 若输入的不为纯数字将发生异常,通过显示错误提示解决异常 int id = Integer.parseInt(JOptionPane.showInputDialog("请输入删除学生的学号:")); // 调用工具类的deleteByID方法删除学生信息,并判断是否成功 if (tool.deleteByID(id)) { JOptionPane.showMessageDialog(null, id + "删除成功"); setTable(tool.selectAll()); } else { JOptionPane.showMessageDialog(null, "未找到学号:" + id); } } catch (Exception e2) { JOptionPane.showMessageDialog(null, "学号应为纯数字!"); } } } public static void main(String[] args){ SQLFrame frame = new SQLFrame(); frame.show(); } }
defaulttablemodel 刷新数据库里的数据
如下图,我页面上有一个刷新按钮,想通过那个按钮在按钮监听事件中,获取result值然后直接刷新列表。现在按钮点了没反应,不知道哪里出了问题![图片说明](https://img-ask.csdn.net/upload/201703/26/1490518781_255645.png) ``` import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.RowSorter; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; import org.springframework.jdbc.core.RowCallbackHandler; import com.tlxx.dao.MaterialDao; import com.tlxx.model.MaterialList; import com.tlxx.util.DbUtil; import com.tlxx.util.StringUtil; public class MaterialsFrm extends javax.swing.JInternalFrame { MaterialDao materialDao = new MaterialDao(); DbUtil dbUtil = new DbUtil(); private JTable Table; String[] COLUMN = { "物料编号", "物料名称", "规格", "包装规格", "产地", "计量单位", "库存", "单价" };// 表格的列 private Object[][] result; private DefaultTableModel model;// 声明定义表格的模型 private JTextField ItmNameTxt; private JTextField ItmIdTxt; /** * Create the frame. */ public MaterialsFrm() { setClosable(true); setIconifiable(true); setFrameIcon(null); this.setLocation(0, 0); setTitle("\u836F\u6750\u5217\u8868"); initComponents(); getContentPane().setLayout(null); } // 搜索框检索查询 private void searchActionPerformed(ActionEvent evt) { String itmName = this.ItmNameTxt.getText(); String itmId = this.ItmIdTxt.getText(); if (StringUtil.isEmpty(itmName) && StringUtil.isEmpty(itmId)) { JOptionPane.showMessageDialog(null, "<html> <font face= '宋体 ' size= '5'> <b>物料名称或编号不能为空!</b> </font> </html> "); return; } MaterialList matlist = new MaterialList(itmId, itmName); try { result = getFileStates(materialDao.search(dbUtil.getCon(), matlist)); if (result.length == 0) { JOptionPane.showMessageDialog(null, "<html> <font face= '宋体 ' size= '5'> <b>不存在该物料,请重新输入!</b> </font> </html>"); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showConfirmDialog(null, "<html> <font face= '宋体 ' size= '5'> <b>查询异常,请重试或联系管理员!</b> </font> </html>"); } } // 刷新物料按钮 private void refreshActionPerformed(ActionEvent evt) { try { result = getFileStates(materialDao.selectMaterial(dbUtil.getCon())); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } model = new DefaultTableModel(result, COLUMN); Table = new JTable(); Table.setModel(model); } private void initComponents() { JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(30, 150, 1300, 538); getContentPane().add(scrollPane); Table = new JTable(); scrollPane.setColumnHeaderView(Table); try { result = getFileStates(materialDao.selectMaterial(dbUtil.getCon())); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } JButton searchButton = new JButton("搜索"); searchButton.setBounds(610, 27, 123, 33); getContentPane().add(searchButton); searchButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { searchActionPerformed(evt); } }); JLabel label_ItemName = new JLabel("物料名称"); label_ItemName.setFont(new Font("宋体", Font.PLAIN, 20)); label_ItemName.setBounds(30, 31, 81, 33); getContentPane().add(label_ItemName); ItmNameTxt = new JTextField(); ItmNameTxt.setBounds(140, 28, 96, 33); getContentPane().add(ItmNameTxt); ItmNameTxt.setColumns(10); JLabel label_ItmID = new JLabel("物料编号"); label_ItmID.setFont(new Font("宋体", Font.PLAIN, 20)); label_ItmID.setBounds(297, 31, 81, 33); getContentPane().add(label_ItmID); ItmIdTxt = new JTextField(); ItmIdTxt.setBounds(406, 28, 96, 33); getContentPane().add(ItmIdTxt); ItmIdTxt.setColumns(10); JButton refreshButton = new JButton("刷新物料"); refreshButton.setBounds(30, 106, 123, 29); getContentPane().add(refreshButton); refreshButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { refreshActionPerformed(evt); } }); // 数字字段需要按照数值类型排序,而不是字符串类型排序。需覆盖DefaultTableModel的getColumnClass方法进行数值排序 model = new DefaultTableModel(result, COLUMN) { public Class getColumnClass(int column) { Class returnValue; if ((column >= 0) && (column < getColumnCount())) { returnValue = getValueAt(0, column).getClass(); } else { returnValue = Object.class; } return returnValue; } }; Table = new JTable() { //表格不允许被编辑 public boolean isCellEditable(int row, int column) { return false; } }; Table.setModel(model); // RowSorter方法进行表格内排序 RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); Table.setRowSorter(sorter); // Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // 设置表格大小改变自动变化模型 Table.setGridColor(Color.black);// 设置表格中网格线颜色 Table.setFont(new Font("宋体", Font.BOLD, 20));// 设置字体 DefaultTableCellRenderer cr = new DefaultTableCellRenderer();// 设置单元格居中显示 cr.setHorizontalAlignment(SwingConstants.CENTER); Table.setDefaultRenderer(Object.class, cr); JTableHeader tableHeader = Table.getTableHeader(); tableHeader.setReorderingAllowed(false);// 设置表格列不可移动 scrollPane.setViewportView(Table); pack(); } /** * @param args * the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); try { /* * 更改皮肤,点击substance.jar -> 找到org.jvnet.substance.skin这个包 -> * 将下面的SubstanceDustCoffeeLookAndFeel 替换成 * 刚刚打开的包下的任意一个“Substance....LookAndFeel”即可 */ UIManager.setLookAndFeel(new org.jvnet.substance.skin.SubstanceCremeCoffeeLookAndFeel()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } new MaterialsFrm().setVisible(true); } }); } private Object[][] getFileStates(List list) { // 获取二维数组的方法 Object[][] types = new Object[list.size()][8]; for (int i = 0; i < list.size(); i++) { MaterialList type = (MaterialList) list.get(i); types[i][0] = type.getItmID(); types[i][1] = type.getItmName(); types[i][2] = type.getItmSpec(); types[i][3] = type.getPackSpec(); types[i][4] = type.getPlace(); types[i][5] = type.getPrice(); types[i][6] = type.getStock(); types[i][7] = type.getUnit(); } return types; } } ```
Java GUI如何将文件中的内容读入Jtable中
文件中有四列信息,分别是不同的数据类型,想要用DefaulttableModel读进去,但是构造函数需要一个二维数组以及一个一维数组,二维数组那个地方由于只能定义一种类型,但是需要的数据有多种类型,不知道应该怎样解决了
Java怎么将我计算的数据以表格形式输出?
![图片说明](https://img-ask.csdn.net/upload/201812/11/1544459967_164265.jpg) 怎么计算阶乘已经打出来了,但是不会以表格的形式输出。。。 以下是我目前进度 ``` package a2; import java.util.Scanner; public class Test { static double Fact() { Scanner s = new Scanner(System.in); System.out.println("请输入两个数,形成一个闭区间"); int m=s.nextInt(); int n=s.nextInt(); int i; double sum = 0; for(int k = m;k<=n;k++) { double result = 1; for(i=1;i<=k;i++) { result = result*i; } System.out.println(i-1+"!"+"="+result); sum = sum+result; } return sum; } public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(Test.Fact()); } } ``` ``` package a2; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; import java.util.Scanner; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class J_Table extends JFrame{ DefaultTableModel m_data; JTable m_view; public J_Table() { super("阶乘及阶乘之和"); Container c = getContentPane(); c.setLayout(new FlowLayout()); m_data = new DefaultTableModel(3,2); m_view = new JTable(m_data); m_view.setPreferredScrollableViewportSize(new Dimension(300,150)); m_view.setAutoResizeMode(JTable.AUTO_RESIZE_OFF ); JScrollPane sPane = new JScrollPane(m_view); c.add(sPane); } public static void main(String[] args) { // TODO Auto-generated method stub JFrame app = new J_Table(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); app.setSize(350, 250); app.setVisible(true); } } ``` ![图片说明](https://img-ask.csdn.ne t/upload/201812/11/1544460311_405655.png) 反正就是乱七八糟的看了一些关于表格的内容,还是不懂!有什么推荐在哪学,或者怎么学吗!
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
源码阅读(19):Java中主要的Map结构——HashMap容器(下1)
(接上文《源码阅读(18):Java中主要的Map结构——HashMap容器(中)》) 3.4.4、HashMap添加K-V键值对(红黑树方式) 上文我们介绍了在HashMap中table数组的某个索引位上,基于单向链表添加新的K-V键值对对象(HashMap.Node&lt;K, V&gt;类的实例),但是我们同时知道在某些的场景下,HashMap中table数据的某个索引位上,数据是按照红黑树
c++制作的植物大战僵尸,开源,一代二代结合游戏
    此游戏全部由本人自己制作完成。游戏大部分的素材来源于原版游戏素材,少部分搜集于网络,以及自己制作。 此游戏为同人游戏而且仅供学习交流使用,任何人未经授权,不得对本游戏进行更改、盗用等,否则后果自负。 目前有六种僵尸和六种植物,植物和僵尸的动画都是本人做的。qq:2117610943 开源代码下载 提取码:3vzm 点击下载--&gt; 11月28日 新增四种植物 统一植物画风,全部修
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
深度学习图像算法在内容安全领域的应用
互联网给人们生活带来便利的同时也隐含了大量不良信息,防范互联网平台有害内容传播引起了多方面的高度关注。本次演讲从技术层面分享网易易盾在内容安全领域的算法实践经验,包括深度学习图
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程实用技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法,并会持续更新。
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
"狗屁不通文章生成器"登顶GitHub热榜,分分钟写出万字形式主义大作
前言 GitHub 被誉为全球最大的同性交友网站,……,陪伴我们已经走过 10+ 年时间,它托管了大量的软件代码,同时也承载了程序员无尽的欢乐。 上周给大家分享了一篇10个让你笑的合不拢嘴的Github项目,而且还拿了7万+个Star哦,有兴趣的朋友,可以看看, 印象最深刻的是 “ 呼吸不止,码字不停 ”: 老实交代,你是不是经常准备写个技术博客,打开word后瞬间灵感便秘,码不出字? 有什么
推荐几款比较实用的工具,网站
1.盘百度PanDownload 这个云盘工具是免费的,可以进行资源搜索,提速(偶尔会抽风????) 不要去某站买付费的???? PanDownload下载地址 2.BeJSON 这是一款拥有各种在线工具的网站,推荐它的主要原因是网站简洁,功能齐全,广告相比其他广告好太多了 bejson网站 3.二维码美化 这个网站的二维码美化很好看,网站界面也很...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问