我有一个JTable并在JTable和其他属性中设置图片作为背景我使用此代码.
tblMainView= new JTable(dtModel){
public Component prepareRenderer(TableCellRenderer renderer, int row,
int column)
{
Component c = super.prepareRenderer( renderer, row, column);
// We want renderer component to be transparent so background image
// is visible
if( c instanceof JComponent )
((JComponent)c).setOpaque(false);
return c;
}
ImageIcon image = new ImageIcon( "images/watermark.png" );
public void paint( Graphics g )
{
// First draw the background image - tiled
Dimension d = getSize();
for( int x = 0; x < d.width; x += image.getIconWidth() …Run Code Online (Sandbox Code Playgroud) 我有一个带有预定义模型的 JTable
如何要求模型在特定位置插入特定列?
so i want something like : DefaultTableModel.insertRow(int,Object[]) for columns
我对这两者之间的区别有所了解。但是,我对何时使用何时使用有些困惑。我只知道,
我们可以从视图和模型中获取表的值。这是我感到困惑的地方。如果发生任何类似(行选择)的事件,那么我必须从中获取值?是从视图还是模型?考虑到 JTable 的排序和过滤,使用的最佳实践是什么?
我正在实现JTable作为用户注册表单,我差不多完成了,但是当添加数据时它没有显示输入的最新数据,并且JTable的大小也非常小.我怎么能增加呢?
代码在下面的链接JTable实现中
我正在尝试使用 JTable 来更新 Java SWING 应用程序中的用户,目前当我编辑单元格时,只有单击不同的单元格从而触发 tableModelListener 才能获得编辑结果。我希望能够在不单击其他单元格的情况下在按钮事件上获取这些更改的值。
我的表定义:
DefaultTableModel tableModel = new DefaultTableModel();
table = new JTable(tableModel);
tableModel.addColumn("Key");
tableModel.addColumn("Value");
if (PatientView.getSelected() != null){
tableModel.addRow(new Object[]{"Name", PatientView.getSelected().getName()});
tableModel.addRow(new Object[]{"Age", PatientView.getSelected().getAge()});
tableModel.addRow(new Object[]{"Height", PatientView.getSelected().getHeight()});
tableModel.addRow(new Object[]{"Weight", PatientView.getSelected().getWeight()});
tableModel.addRow(new Object[]{"BMI", PatientView.getSelected().getCalculatedBMI()});
}
Run Code Online (Sandbox Code Playgroud)
表监听器
tableModel.addTableModelListener(new TableModelListener(){
@Override
public void tableChanged(TableModelEvent arg0) {
int row = arg0.getFirstRow();
int column = arg0.getColumn();
Object data = tableModel.getValueAt(0, 1);
System.out.println(data);
}
});
Run Code Online (Sandbox Code Playgroud)
按钮动作监听器
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Vector data = tableModel.getDataVector();
System.out.println(table.getValueAt(0, 1)); …Run Code Online (Sandbox Code Playgroud) 我有下一个JTable
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"Hat", "New York", "1000"},
{"T-Shirt", "New York", "3500"},
{"Sweater", "Washington", "2800"},
{"Bag", "California", "7000"},
},
new String [] {
"Name", "Warehouse", "Quantity"
}
));
jScrollPane1.setViewportView(jTable1);
getContentPane().add(jScrollPane1);
jScrollPane1.setBounds(19, 11, 375, 170);
jButton1.setText("Copy");
getContentPane().add(jButton1);
jButton1.setBounds(113, 195, 63, 23);
jButton2.setText("Exit");
getContentPane().add(jButton2);
jButton2.setBounds(225, 195, 53, 23);
pack();
}
Run Code Online (Sandbox Code Playgroud)
我希望按钮将模型的信息复制到剪贴板,但它不起作用,我尝试过使用
String myString = "This text will …Run Code Online (Sandbox Code Playgroud) 嗨,我使用第二个线程每2秒更新一次JTable的DefaultTableModel并且随机地随机,它会抛出以下错误.
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649)
at javax.swing.JTable.getValueAt(JTable.java:2716)
at javax.swing.JTable.prepareRenderer(JTable.java:5714)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2108)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2010)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1806)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
at javax.swing.JComponent.paintComponent(JComponent.java:769)
at javax.swing.JComponent.paint(JComponent.java:1045)
at javax.swing.JComponent.paintChildren(JComponent.java:878)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JViewport.paint(JViewport.java:731)
at javax.swing.JComponent.paintChildren(JComponent.java:878)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5212)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
at javax.swing.RepaintManager.paint(RepaintManager.java:1236)
at javax.swing.JComponent._paintImmediately(JComponent.java:5160)
at javax.swing.JComponent.paintImmediately(JComponent.java:4971)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at javax.swing.RepaintManager$3.run(RepaintManager.java:784)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:784)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:757)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:706)
at javax.swing.RepaintManager.access$1000(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1651)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native … java swing jtable indexoutofboundsexception defaulttablemodel
我想创建2个JTabbedPanes,它们具有相同的JTable但在其中一列中具有不同的值.现在由于某种原因只有一个标签出现,我不知道为什么.我也是通过创造2种不同DefaultTableModel的方式来做到最好的方式吗?
public static void tableMaker(DefaultTableModel m, DefaultTableModel m1, final Map<String, NumberHolder> uaCount)
{
final JFrame frame = new JFrame("Strings");
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JTabbedPane tabbedPane = new JTabbedPane();
m.addColumn("String");
m.addColumn("Occurrences");
m1.addColumn("String");
m1.addColumn("Occurrences");
JTable table = new JTable(m);
JTable table = new JTable(m1);
table.setAutoCreateRowSorter(true);
JScrollPane scrollPane1 = new JScrollPane(table1);
JScrollPane scrollPane2 = new JScrollPane(table2);
frame.getContentPane().setLayout(new BorderLayout());
panel1.add(scrollPane1);
panel2.add(scrollPane2);
frame.getContentPane().add(panel1, BorderLayout.CENTER);
frame.getContentPane().add(panel2, BorderLayout.CENTER);
frame.add(tabbedPane, BorderLayout.NORTH);
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
tabbedPane.addTab("Tab 1", null, panel1,
"String length 2");
tabbedPane.addTab("Tab …Run Code Online (Sandbox Code Playgroud) 我有一个JTable.此表使用我设计的自定义模型; 自定义模型是extends AbstractTableModel.我有一个按钮,用户可以删除选定/突出显示的行.
我试过这段代码,但它给了我一个类强制转换异常 -
myTableModel cannot be cast to DefaultTableModel.
Run Code Online (Sandbox Code Playgroud)
下面是代码.
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.removeRow(table.convertRowIndexToModel(table.getSelectedRow()));
model.fireTableDataChanged();`
Run Code Online (Sandbox Code Playgroud)
我在网上搜索过,但它总是DefaultTableModel- 但我有AbstarctTableModel.
我们如何解决这个问题?
我收到以下错误消息.
java.lang.ArrayIndexOutOfBoundsException: 21 >= 21
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
at com.vanuston.medeil.uitables.PurchaseTable.createTable(PurchaseTable.java:182)
at com.vanuston.medeil.ui.Purchase.applyDefaults$(Purchase.fx:130)
Run Code Online (Sandbox Code Playgroud)
在下面的代码的第三行.
jTable.removeColumn(jTable.getColumnModel().getColumn(19));
jTable.removeColumn(jTable.getColumnModel().getColumn(20));
jTable.removeColumn(jTable.getColumnModel().getColumn(21));
jTable.removeColumn(jTable.getColumnModel().getColumn(22));
Run Code Online (Sandbox Code Playgroud)
我已经添加了第21和第22列DefaultTableModel.
Vector cols = new Vector();
Vector data = new Vector();
int len = colName.length;
System.out.println("col length " + len);
for (int i = 0; i < initRow; i++) {
Vector c = new Vector();
for (int j = 0; j < len; j++) {
if (j == 19 && j == 20) {
c.addElement(Boolean.FALSE);
} else {
c.addElement(null);
} …Run Code Online (Sandbox Code Playgroud)