有没有人知道可以保存到文件的基于JTable的Swing组件或代码示例?ie:提供一个菜单项或按钮,单击该按钮会提示用户输入文件位置并将表的内容保存到文件(CSV,XLS,TXT或其他).
简单的部分是循环遍历行并保存到文件.但是桌面本身也需要一个UI组件,允许用户启动保存.
我有一个JTable并添加了排序.现在,JTable有5列,日期字段中的第2列转换为DD/MM/YYYY,并显示在单元格的JTextField中.
当我将它排序为字符串并且我将日期混淆时,如何更改该特定列的排序行为?
例如.按照ASC顺序排序后,我得到了这个:
01/02/2012
01/03/2011
01/04/2011
01/05/2011
01/06/2011
01/07/2011
01/08/2011
01/09/2011
01/10/2011
01/12/2011
Run Code Online (Sandbox Code Playgroud)
这是错的,我应该得到结果
01/03/2011
01/04/2011
01/05/2011
01/06/2011
01/07/2011
01/08/2011
01/09/2011
01/10/2011
01/12/2011
01/02/2012
Run Code Online (Sandbox Code Playgroud)
我的代码现在看起来像这样排序
List<SortKey> sortKeys = new ArrayList<SortKey>();
sortKeys.add(new SortKey(2, SortOrder.ASCENDING));
table.getRowSorter().setSortKeys(sortKeys);
Run Code Online (Sandbox Code Playgroud)
我应该仅针对该特定列更改哪些内容?
这是我的JTable代码,我打算用它来拥有ComboBox,JSpinner,JRadioButton,JTextfeiled等所有组件.
但我最终得到了这个,表头没有出现,我无法编辑列.请指出我的错误,因为我经常尝试并放弃了
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
import javax.swing.table.*;
public class TableComponent extends JFrame
{
JTable dataTable = null;
public int changeRow = -1, changeColumn = -1;
public JRadioButton radioButton = new JRadioButton();
public void init() {
JPanel upperPanel = setMainPanel();
super.getContentPane().removeAll();
Container content = super.getContentPane();
content.setLayout(new BorderLayout());
content.add(upperPanel, BorderLayout.CENTER);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(800, 400);
setVisible(true);
}
public static void main(String[] args) {
TableComponent tableComponent = new TableComponent();
tableComponent.init();
}
// This function set the main Panel
private JPanel …Run Code Online (Sandbox Code Playgroud) 我想补充jRadioButton到jTable.我用了给定的代码
private class CustomCellRenderer extends DefaultTableCellRenderer {
/* (non-Javadoc)
* @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
*/
@Override
public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {
return new javax.swing.JRadioButton();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行这个时,我会得到jTable一个不同颜色的列,当我点击单选按钮时没有任何反应.我正在使用netbeans.如果我尝试自定义,jTable则不会出现任何内容jTable.给我一个适当的指导.
我想要做的就是在JTable用户点击一个按钮时显示一些数据并且它可以正常工作,但是会发生一些奇怪的事情.当我第一次点击按钮时没有任何反应,但是当我最大化帧时,表格出现了!
ActionListenerb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
boolean state = external.isSelected();
DefaultTableModel model = new DefaultTableModel(ManhattanTable(values), Headers(values));
JTable table = new JTable(model);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
container.add(new JScrollPane(table));
table.setVisible(false);
if(state) {
PrintStream out = null;
try {
out = new PrintStream(new FileOutputStream("output.txt"));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.setOut(out);
long start= System.currentTimeMillis();
Manhattan(values);
long end=System.currentTimeMillis();
out.println("time: "+(end-start)+" milliseconds");
out.println("Number of input data: "+values.size());
} else { …Run Code Online (Sandbox Code Playgroud) 我在JTable实例上选择行时遇到问题.
这就是我想要的:
我希望有两个相同的表,行中的数据相同.当您在第一个表上选择一行时,例如第三行,我还希望自动选择第二个表上的第三行.我通过ListSelectionListener在JTable中添加一个更新一个只保存所选值的类来解决这个问题.然后该类使用第一个选定的值触发另一个JTable.
我的问题是:
当用户对其中一个表上的行进行排序时,会出现问题.然后视图将更改,但不会更改模型中的基础对象,其顺序与之前相同.
我们假设在启动应用程序时表格如下:
Column_1_header_in_table_1 Column_1_header_in_table_2
Peter Peter
John John
Steve Steve
Run Code Online (Sandbox Code Playgroud)
当选择第一行table 1(即Peter)时,应选择包含Peter的行table 2,也是第一行.
但是,如果我按下列标题table 1以便对列进行排序,那么该表的视图将更改为:
Column_1_header_in_table_1 Column_1_header_in_table_2
John Peter
Steve John
Peter Steve
Run Code Online (Sandbox Code Playgroud)
现在,如果我选择第一行table 1(即John),table 2将选择第一行(即Peter).但我希望table 1选择与in相同名称的行table 2,即第2行table 2.
我可以用一些方法来解决这个问题吗?
编辑
好的,我将尝试用我在没有编辑器的情况下编写的代码来描述我的解决方案,因此我可能包含一些错误.但我只想在概念上展示它现在如何运作.首先,我完成了MyTable实现的这个接口:
public interface TableUpdater {
public void updateTable(int age);
}
Run Code Online (Sandbox Code Playgroud)
PersonHolder类只保存最后选择的值,并在从第一个选择新值时触发另一个表.
public class PersonHolder {
private static int age;
private List<TableUpdater> tables = new ArrayList<>(); …Run Code Online (Sandbox Code Playgroud) 我有一个JTable,它填充了来自矢量的数据,我希望它在编辑数据后在数据库中自动保存.
Vector columnNames = new Vector();
Vector data = new Vector();
Connection conn = dbConnect.connect();
String sql = "Select date, frequency, type, payeereceivee, amount, comments from schedule where date ='" + outputdate + "'";
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
ResultSetMetaData metaData = resultSet.getMetaData();
int columns = metaData.getColumnCount();
for (int i = 1; i <= columns; i++) {
columnNames.addElement(metaData.getColumnName(i));
}
while (resultSet.next()) {
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++) { …Run Code Online (Sandbox Code Playgroud) 我有一个动态创建和填充的表.单击其他表单中的按钮时会显示此动态表单.这是代码:
package ExaData;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.NumberFormat;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.StackedBarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RefineryUtilities;
public class ShowGraph extends javax.swing.JFrame {
String[][] data;
String[] columns={"Tan?m","De?er"};
Sessionn obj;
String SGA="SGA";
String PGA="PGA";
String JAVAPOOL="JAVAPOOL";
JCheckBox SGA_CHECK;
JCheckBox PGA_CHECK;
JCheckBox JAVA_POOL_CHECK;
JTable table;
JPanel btnPanel,tblPanel;
ChartPanel …Run Code Online (Sandbox Code Playgroud) 尝试为日期编写自己的单元格渲染器.以此为例:
class MyRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable jtab, Object v, boolean selected, boolean focus, int r, int c){
JLabel rendComp = (JLabel) super.getTableCellRendererComponent(jtab, v, selected, focus, r, c);
SimpleDateFormat formatter=new SimpleDateFormat("dd.MM.yy", Locale.ENGLISH);
rendComp.setText(formatter.format(v));
System.out.println(formatter.format(v));
return rendComp;
}
}
class DateModel extends AbstractTableModel{
String colName[]={"Date"};
public int getRowCount(){
return 5;
}
public int getColumnCount() {
return 1;
}
public String getColumnName(int c){
return colName[c];
}
public Object getValueAt(int r, int c){
return Calendar.getInstance().getTime();
}
}
public class Test { …Run Code Online (Sandbox Code Playgroud) 添加一行后,我希望刷新JTable.不幸的是它不是.
我的代码是这样的:
我如何添加一行:
JButton btnDodaj = new JButton("Dodaj");`
panel.add(btnDodaj);
btnDodaj.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selectedOption = JOptionPane.showConfirmDialog(null, "Na pewno chcesz dodac nowy rekord?",
"wybieraj", JOptionPane.YES_NO_OPTION);
if (selectedOption == JOptionPane.NO_OPTION) {
return;
}
dbHelper.dodajOsoba(editPaneName.getText(), editPaneNazw.getText(), formattedDataUr.getText(),
(Enum) comboBoxStCyw.getSelectedItem(), (String) comboBoxZaw.getSelectedItem(),
(String) comboBoxMia.getSelectedItem(), textFieldPesel.getText());
simpleTableDemo.model.fireTableDataChanged();
}
});
Run Code Online (Sandbox Code Playgroud)
我如何将simpleTableDemo添加到JPanel:
simpleTableDemo = new ListaOsob();
sl_panel.putConstraint(SpringLayout.NORTH, simpleTableDemo, 100, SpringLayout.SOUTH, comboBoxMia);
sl_panel.putConstraint(SpringLayout.WEST, simpleTableDemo, 33, SpringLayout.WEST, panel);
sl_panel.putConstraint(SpringLayout.EAST, simpleTableDemo, 617, SpringLayout.WEST, panel);
panel.add(simpleTableDemo);
Run Code Online (Sandbox Code Playgroud)
SimpleTableDemo的定义:
Object[][] data2 = dbHelper.wyswietlOsoba();
model = new DefaultTableModel(data2, columnNames); …Run Code Online (Sandbox Code Playgroud) java ×10
jtable ×10
swing ×9
cell ×1
jdbc ×1
jradiobutton ×1
jscrollpane ×1
netbeans ×1
repaint ×1
sorting ×1