我通过带有(Object[][]data,String[]headers)构造函数的DefaultTableModel填充了一个JTable .用户可以编辑表,我希望能够将新数据加载回数组(Object[][]).请注意,我不是一点一点地更新数组,而是能够从表中完全加载一个新数组.如何才能做到这一点?
我在这里遇到了一件奇怪的事情。我正在尝试在JTable单元内添加JLabel。标签图标可能会根据某些条件发生变化。我根据以下规范创建了一个虚拟项目:http : //javanepal.wordpress.com/2010/06/30/adding-jlabel-in-jtable/
而且效果很好。我将TableModel更改为从AbstractTableModel而不是DefaultTableModel扩展,现在添加一行时,如果检查Object [],则可以得到此信息:
[javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,
flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,
disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,
iconTextGap=4,labelFor=,text=Row 1,Col1,verticalAlignment=CENTER,
verticalTextPosition=CENTER], whatever....]
Run Code Online (Sandbox Code Playgroud)
对于TableModel,代码是这样的:
public class MyModel extends javax.swing.table.AbstractTableModel {
Object[][] row = {{new JLabel("Row 1 Col 1"), "Row 1 Col 2", "Row 1 Col3"},
{new JLabel("Row 2 Col 1"), "Row 2 Col 2", "Row 2 Col3"},
{new JLabel("Row 3 Col 1"), "Row 3 Col 2", "Row 3 Col3"},
{new JLabel("Row 4 Col 1"), "Row 4 Col 2", "Row 4 Col3"}};
Object[] col = {"Column 1", "Column 2", "Column 3"}; …Run Code Online (Sandbox Code Playgroud) HY.我正在尝试使用AbstractTableModel构建一个简单的JTable,但即使我使用了JScrollPane,列名也不会出现.
public class TableModel extends AbstractTableModel{
private String[] columnNames = new String[]{"#","Name","Price","Quantity","Description"};
public TableModel() {
super();
System.out.println("constructor");
}
public int getColumnCount() {
return 0;
}
public int getRowCount() {
return 0;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return null;
}
public String getColumnName(int columnIndex) {
System.out.println("in");
return columnNames[columnIndex];
}
}
Run Code Online (Sandbox Code Playgroud)
我按以下方式将表格放在JPanel上:
table = new JTable(new TableModel());
add(new JScrollPane(table));
Run Code Online (Sandbox Code Playgroud)
不调用方法getColumnName.为什么?
所以我想在我的JTable中添加一个带有背景颜色的空JLabel.这是一个饼图,我想添加这个以便传说匹配.
码:
for (String result : queryResult) {
JLabel label = new JLabel("Hallo: "+rowCount);
label.setBackground(colors[rowCount]);
label.setOpaque(true);
String queryResultString = "";
queryResultString = result.toString();
String[] lineArray = queryResultString.split("////");
String[] pieData = new String[3];
pieData[0] = lineArray[0];
pieData[1] = lineArray[rangId - 1];
int value = Integer.parseInt(pieData[1]);
double percentage = value / total * 100;
pieData[2] = "" + percentage + "%";
pieModel.addRow(new Object[] {label, pieData[0], pieData[1], pieData[2]});
rowCount++;
}
pieTable.setDefaultRenderer(String.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个具有一些任意值的简单可滚动JTable,并将其放在JPanel中.我遇到了一些奇怪的结果,其中JTable出现,但只显示列名称,似乎挤压剩余的行.表格也出现在面板的中央,我希望它位于顶部.
// Panel to hold our layer information
JPanel layerPanel = new JPanel(new GridBagLayout());
layerPanel.setBackground(Color.LIGHT_GRAY);
layerPanel.setPreferredSize(new Dimension(200, 200));
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(0,5,0,5);
c.weightx = 1; c.weighty = 0.0;
c.fill = GridBagConstraints.BOTH;
c.gridx = 0; c.gridy = 0;
String[] columns = { "Show", "Layer" };
Object[][] data = {{"x", "Layer1"},
{"x", "Layer2"}};
// Construct our table to hold our list of layers
JTable layerTable = new JTable(data, columns);
layerTable.getColumnModel().getColumn(0).setPreferredWidth(64);
layerPanel.add(new JScrollPane(layerTable), c);
frame.add(layerPanel);
Run Code Online (Sandbox Code Playgroud)
任何帮助是值得赞赏的,当我使用GridLayout(1,0)而不是使用GridBagLayout时,代码可以工作,所以我觉得我使用错了.
感谢您的时间.
我正在使用swing创建用户注册表单.某些标签显示不正确,也不显示列名.
以下是我的代码:
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.JTextField;
import java.awt.Insets;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.Window.Type;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JScrollBar;
import java.awt.Scrollbar;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.ListSelectionModel;
public class UserRegistration {
private …Run Code Online (Sandbox Code Playgroud) 我有一个JTable,我想改变一个单元格的工具提示的默认位置JTable.我想在其他地方显示单元格工具提示,而不是在同一单元格的顶部.基本上我想完全控制该工具提示的行为.有什么建议?
我对Java很陌生,我一整天都试图过度解决这个问题,但它无法正常工作.我正在尝试编写一个连接Excel工作表的Java应用程序,并允许通过GUI插入/保存/排序适合电影数据库的数据.这是来自classe的代码,其中GUI-magic和排序发生:
package gui;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import object.Film;
import excel.Excelverbindung;
public class Tabelle extends JTable {
/**
*
*/
private static final long serialVersionUID = 1L;
static String[] columnNames = { "Nr.", "Titel", "Jahr", "Regie",
"Primäres Genre", "Sekundäres Genre", "Wertung", "Originaltitel" };
static List<Film> rowlist = new ArrayList<Film>();
static String[] rowData = {};
JTable table = new JTable();
Excelverbindung excelverb = new Excelverbindung();
public Tabelle() {
} …Run Code Online (Sandbox Code Playgroud)