private JTable getTable() {
if (table == null) {
table = new JTable();
DefaultTableModel dft = new MyTable();
dft.addColumn("ID");
dft.addColumn("性别");
dft.addColumn("日期");
table.setModel(dft);
table.setDefaultEditor(SexEnum.class, new DefaultCellEditor(new JComboBox(SexEnum.values())));
table.setDefaultRenderer(SexEnum.class, new DefaultTableCellRenderer());
table.setRowHeight(20);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
return table;
}
class MyTable extends DefaultTableModel
{
private static final long serialVersionUID = 1L;
public Class<?> getColumnClass(int columnIndex)
{
if(columnIndex == 1)
return SexEnum.class;
else
return Object.class;
}
public boolean isCellEditable(int row, int column)
{
return column == 1;
}
}
Object[] rowData = new Object[]{"1","男","2001-09-09"};
private JButton getBtnShow()
{
if (btnShow == null)
{
btnShow = new JButton("show");
btnShow.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
dft.addRow(rowData);
dft.addRow(rowData);
dft.addRow(rowData);
}
});
btnShow.setBounds(37, 25, 93, 23);
}
return btnShow;
}
10 个解决方案
#1
你把代码全部贴出来看看吧,贴这一段很蛋疼
#2
想要显示表头,需要放到jscrollpane里
#3
public void init(){
JTable t = new JTable();
Vector<Object> header = new Vector<Object>() ; //标题
Vector<Vector<Object>> table = new Vector<Vector<Object>>();//表格内容
Vector<Object> content = new Vector<Object>();//每一条的内容
header.addElement("id");
header.addElement("性别");
header.addElement("日期");
table.addElement(content) ;
DefaultTableModel det = new DefaultTableModel(header , table);
。。。。。。。。。。。。。。。
}
JTable t = new JTable();
Vector<Object> header = new Vector<Object>() ; //标题
Vector<Vector<Object>> table = new Vector<Vector<Object>>();//表格内容
Vector<Object> content = new Vector<Object>();//每一条的内容
header.addElement("id");
header.addElement("性别");
header.addElement("日期");
table.addElement(content) ;
DefaultTableModel det = new DefaultTableModel(header , table);
。。。。。。。。。。。。。。。
}
#4
public class JTableAddJComboBox extends JFrame
{
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JScrollPane scrollPane;
private JTable table;
private JButton btnShow;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
JTableAddJComboBox frame = new JTableAddJComboBox();
frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public JTableAddJComboBox()
{
initialize();
}
private void initialize() {
setTitle("table contain comboBox");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
contentPane.add(getScrollPane());
contentPane.add(getBtnShow());
}
private JScrollPane getScrollPane() {
if (scrollPane == null) {
scrollPane = new JScrollPane();
scrollPane.setBounds(57, 72, 288, 180);
scrollPane.setColumnHeaderView(getTable());
}
return scrollPane;
}
private JTable getTable() {
if (table == null) {
table = new JTable();
DefaultTableModel dft = new MyTable();
dft.addColumn("ID");
dft.addColumn("性别");
dft.addColumn("日期");
table.setModel(dft);
table.setDefaultEditor(SexEnum.class, new DefaultCellEditor(new JComboBox(SexEnum.values())));
table.setDefaultRenderer(SexEnum.class, new DefaultTableCellRenderer());
table.setRowHeight(20);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
return table;
}
class MyTable extends DefaultTableModel
{
private static final long serialVersionUID = 1L;
public Class<?> getColumnClass(int columnIndex)
{
if(columnIndex == 1)
return SexEnum.class;
else
return Object.class;
}
public boolean isCellEditable(int row, int column)
{
return column == 1;
}
}
Object[] rowData = new Object[]{"1","男","2001-09-09"};
private JButton getBtnShow()
{
if (btnShow == null)
{
btnShow = new JButton("show");
btnShow.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
dft.addRow(rowData);
dft.addRow(rowData);
dft.addRow(rowData);
}
});
btnShow.setBounds(37, 25, 93, 23);
}
return btnShow;
}
}
#5
这是全部代码,现在不但不显示列名,而且scrollPane不管用,数据过多时,不会出现滚动条
#6
正解
#7
SexEnum的代码没有贴出来
#8
我把SexEnum的部分给注解掉了,下面这个JTable是正常的,能正常滚动而且有表头,只是show按钮是添加三行数据的逻辑
你原来写的代码整体设计和逻辑有问题,导致了表头没有出来,你研究下给你的代码就行了
你原来写的代码整体设计和逻辑有问题,导致了表头没有出来,你研究下给你的代码就行了
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
public class JTableAddJComboBox extends JFrame
{
private static final long serialVersionUID = 1L;
private Container contentPane;
private JScrollPane scrollPane;
private JTable table;
private JButton btnShow;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
JTableAddJComboBox frame = new JTableAddJComboBox();
frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public JTableAddJComboBox()
{
initialize();
}
private void initialize() {
setTitle("table contain comboBox");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
// contentPane = new JPanel();
contentPane = this.getContentPane();
// contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
// setContentPane(contentPane);
contentPane.setLayout(null);
contentPane.add(getScrollPane());
contentPane.add(getBtnShow());
}
private JScrollPane getScrollPane() {
DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
dft.addRow(rowData);
dft.addRow(rowData);
dft.addRow(rowData);
if (scrollPane == null) {
scrollPane = new JScrollPane(table);
scrollPane.setBounds(57, 72, 288, 180);
}
return scrollPane;
}
private JTable getTable() {
if (table == null) {
table = new JTable();
DefaultTableModel dft = new MyTable();
dft.addColumn("ID");
dft.addColumn("性别");
dft.addColumn("日期");
table.setModel(dft);
// table.setDefaultEditor(SexEnum.class, new DefaultCellEditor(new JComboBox(SexEnum.values())));
// table.setDefaultRenderer(SexEnum.class, new DefaultTableCellRenderer());
table.setRowHeight(20);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
return table;
}
class MyTable extends DefaultTableModel
{
private static final long serialVersionUID = 1L;
public Class<?> getColumnClass(int columnIndex)
{
if(columnIndex == 1)
// return SexEnum.class;
return String.class;
else
return Object.class;
}
public boolean isCellEditable(int row, int column)
{
return column == 1;
}
}
Object[] rowData = new Object[]{"1","男","2001-09-09"};
private JButton getBtnShow()
{
if (btnShow == null)
{
btnShow = new JButton("show");
btnShow.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
dft.addRow(rowData);
dft.addRow(rowData);
dft.addRow(rowData);
}
});
btnShow.setBounds(37, 25, 93, 23);
}
return btnShow;
}
}
#9
SexEnum 就是一个enum类,里面包括两个值“男、女”完了
用这个类就是想让jtable里某列能显示下拉列表
public enum SexEnum
{
男,女;
}
用这个类就是想让jtable里某列能显示下拉列表
#10
1、scrollPane.setColumnHeaderView(getTable());//这样写会使table没有表头,所以是错误的。
2、scrollPane.setViewportView(getTable());
1是我之前写的,应该是2这种写法,我是通过直接拖拽过去的,怎么会出现1那种情况了呢,具体还是eclipse的问题,有待研究,谢谢各位了!
2、scrollPane.setViewportView(getTable());
1是我之前写的,应该是2这种写法,我是通过直接拖拽过去的,怎么会出现1那种情况了呢,具体还是eclipse的问题,有待研究,谢谢各位了!
#1
你把代码全部贴出来看看吧,贴这一段很蛋疼
#2
想要显示表头,需要放到jscrollpane里
#3
public void init(){
JTable t = new JTable();
Vector<Object> header = new Vector<Object>() ; //标题
Vector<Vector<Object>> table = new Vector<Vector<Object>>();//表格内容
Vector<Object> content = new Vector<Object>();//每一条的内容
header.addElement("id");
header.addElement("性别");
header.addElement("日期");
table.addElement(content) ;
DefaultTableModel det = new DefaultTableModel(header , table);
。。。。。。。。。。。。。。。
}
JTable t = new JTable();
Vector<Object> header = new Vector<Object>() ; //标题
Vector<Vector<Object>> table = new Vector<Vector<Object>>();//表格内容
Vector<Object> content = new Vector<Object>();//每一条的内容
header.addElement("id");
header.addElement("性别");
header.addElement("日期");
table.addElement(content) ;
DefaultTableModel det = new DefaultTableModel(header , table);
。。。。。。。。。。。。。。。
}
#4
public class JTableAddJComboBox extends JFrame
{
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JScrollPane scrollPane;
private JTable table;
private JButton btnShow;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
JTableAddJComboBox frame = new JTableAddJComboBox();
frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public JTableAddJComboBox()
{
initialize();
}
private void initialize() {
setTitle("table contain comboBox");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
contentPane.add(getScrollPane());
contentPane.add(getBtnShow());
}
private JScrollPane getScrollPane() {
if (scrollPane == null) {
scrollPane = new JScrollPane();
scrollPane.setBounds(57, 72, 288, 180);
scrollPane.setColumnHeaderView(getTable());
}
return scrollPane;
}
private JTable getTable() {
if (table == null) {
table = new JTable();
DefaultTableModel dft = new MyTable();
dft.addColumn("ID");
dft.addColumn("性别");
dft.addColumn("日期");
table.setModel(dft);
table.setDefaultEditor(SexEnum.class, new DefaultCellEditor(new JComboBox(SexEnum.values())));
table.setDefaultRenderer(SexEnum.class, new DefaultTableCellRenderer());
table.setRowHeight(20);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
return table;
}
class MyTable extends DefaultTableModel
{
private static final long serialVersionUID = 1L;
public Class<?> getColumnClass(int columnIndex)
{
if(columnIndex == 1)
return SexEnum.class;
else
return Object.class;
}
public boolean isCellEditable(int row, int column)
{
return column == 1;
}
}
Object[] rowData = new Object[]{"1","男","2001-09-09"};
private JButton getBtnShow()
{
if (btnShow == null)
{
btnShow = new JButton("show");
btnShow.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
dft.addRow(rowData);
dft.addRow(rowData);
dft.addRow(rowData);
}
});
btnShow.setBounds(37, 25, 93, 23);
}
return btnShow;
}
}
#5
这是全部代码,现在不但不显示列名,而且scrollPane不管用,数据过多时,不会出现滚动条
#6
正解
#7
SexEnum的代码没有贴出来
#8
我把SexEnum的部分给注解掉了,下面这个JTable是正常的,能正常滚动而且有表头,只是show按钮是添加三行数据的逻辑
你原来写的代码整体设计和逻辑有问题,导致了表头没有出来,你研究下给你的代码就行了
你原来写的代码整体设计和逻辑有问题,导致了表头没有出来,你研究下给你的代码就行了
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
public class JTableAddJComboBox extends JFrame
{
private static final long serialVersionUID = 1L;
private Container contentPane;
private JScrollPane scrollPane;
private JTable table;
private JButton btnShow;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
JTableAddJComboBox frame = new JTableAddJComboBox();
frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public JTableAddJComboBox()
{
initialize();
}
private void initialize() {
setTitle("table contain comboBox");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
// contentPane = new JPanel();
contentPane = this.getContentPane();
// contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
// setContentPane(contentPane);
contentPane.setLayout(null);
contentPane.add(getScrollPane());
contentPane.add(getBtnShow());
}
private JScrollPane getScrollPane() {
DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
dft.addRow(rowData);
dft.addRow(rowData);
dft.addRow(rowData);
if (scrollPane == null) {
scrollPane = new JScrollPane(table);
scrollPane.setBounds(57, 72, 288, 180);
}
return scrollPane;
}
private JTable getTable() {
if (table == null) {
table = new JTable();
DefaultTableModel dft = new MyTable();
dft.addColumn("ID");
dft.addColumn("性别");
dft.addColumn("日期");
table.setModel(dft);
// table.setDefaultEditor(SexEnum.class, new DefaultCellEditor(new JComboBox(SexEnum.values())));
// table.setDefaultRenderer(SexEnum.class, new DefaultTableCellRenderer());
table.setRowHeight(20);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
return table;
}
class MyTable extends DefaultTableModel
{
private static final long serialVersionUID = 1L;
public Class<?> getColumnClass(int columnIndex)
{
if(columnIndex == 1)
// return SexEnum.class;
return String.class;
else
return Object.class;
}
public boolean isCellEditable(int row, int column)
{
return column == 1;
}
}
Object[] rowData = new Object[]{"1","男","2001-09-09"};
private JButton getBtnShow()
{
if (btnShow == null)
{
btnShow = new JButton("show");
btnShow.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
dft.addRow(rowData);
dft.addRow(rowData);
dft.addRow(rowData);
}
});
btnShow.setBounds(37, 25, 93, 23);
}
return btnShow;
}
}
#9
SexEnum 就是一个enum类,里面包括两个值“男、女”完了
用这个类就是想让jtable里某列能显示下拉列表
public enum SexEnum
{
男,女;
}
用这个类就是想让jtable里某列能显示下拉列表
#10
1、scrollPane.setColumnHeaderView(getTable());//这样写会使table没有表头,所以是错误的。
2、scrollPane.setViewportView(getTable());
1是我之前写的,应该是2这种写法,我是通过直接拖拽过去的,怎么会出现1那种情况了呢,具体还是eclipse的问题,有待研究,谢谢各位了!
2、scrollPane.setViewportView(getTable());
1是我之前写的,应该是2这种写法,我是通过直接拖拽过去的,怎么会出现1那种情况了呢,具体还是eclipse的问题,有待研究,谢谢各位了!