【问题标题】:How to structure my attendance program [closed]如何构建我的出勤计划[关闭]
【发布时间】:2013-01-08 08:51:28
【问题描述】:

我正在制作一个保持出勤率的应用程序。一旦我有了学生名单,我将如何将他们全部显示并检查他们是否在场。我最初认为 JTable 会起作用,但将摆动组件添加到 JTable 并不是世界上最简单的事情。有没有更简单的方法来解决这个问题?下图大致展示了我所描绘的内容,但如果您有不同的想法,请随时分享。谢谢!

【问题讨论】:

  • 我最初认为 JTable 可以工作,但将 Swing 组件添加到 JTable 并不是世界上最简单的事情。 你为什么这么认为?
  • CheckOne 是使用JChckbox 的基本示例;引用了一些JRadioButton 替代方案here

标签: java swing jdbc jradiobutton


【解决方案1】:

这是一个 EG,展示如何使用 JTable

按照@Hendrik Ebbers 的建议,我为ABS/Present 列保留了一个布尔值,它将自动以CheckBox 的形式出现。 首先,您必须使用fooTable.setModel(dataModel) 设置JTabel 的模型,

类似这样的:

    jTable1.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {"Joel", "Hails", new Integer(1011001), new Boolean(true)},
            {"James", "Roggers", new Integer(1912212), null},
            {"Rehy", "Gomes", new Integer(1121212), new Boolean(true)},
            {"Sunil", "gawas", new Integer(9909090), null}
        },
        new String [] {
            "1st name", "last name", "ID/NUMBER", "ABS/Present"
        }
    )

new Object [][] 中我有我的所有数据,new String [] 将有列名。

你可以找到更多信息

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

自己试试,有问题求源码。

更新:

你可以试试这个:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.SwingUtilities;

 public class NewJFrame3 extends JPanel {

 public NewJFrame3() {
 super(new GridLayout(1,0));
 JTable table = new JTable(new MyTableModel());
 table.setPreferredScrollableViewportSize(new Dimension(500, 70));
 table.setFillsViewportHeight(true);

 JScrollPane scrollPane = new JScrollPane(table);

 add(scrollPane);
 }
 class MyTableModel extends AbstractTableModel {
 private String[] columnNames = {"1st Name",
 "Last Name",
 "ID/NUMBER",
 "PRESENT"};
 private Object[][] data = {
 {"Joel", "Hails",
 "110023", new Boolean(false)},
 {"John", "Doe",
 "343409", new Boolean(true)},
 {"Sue", "well",
 "899800", new Boolean(false)},
 {"Jane", "White",
 "990909", new Boolean(true)},

 };
 public int getColumnCount() {
 return columnNames.length;
 }
 public int getRowCount() {
 return data.length;
 }
 public String getColumnName(int col) {
 return columnNames[col];
 }
  public Object getValueAt(int row, int col) {
  return data[row][col];
  }

public Class getColumnClass(int c) {
  return getValueAt(0, c).getClass();
   }




 }

 private static void createAndShowGUI() {
 //Create and set up the window.
 JFrame frame = new JFrame("TableDemo");
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 //Create and set up the content pane.
 NewJFrame3 newContentPane = new NewJFrame3();
 newContentPane.setOpaque(true); //content panes must be opaque
 frame.setContentPane(newContentPane);
 //Display the window.
 frame.pack();
 frame.setVisible(true);
 }
 public static void main(String[] args) {

 SwingUtilities.invokeLater(new Runnable() {
 public void run() {
 createAndShowGUI();
 }
 });
 }
 }

【讨论】:

  • 我确实有一些问题。我试着做你在这里做的事情 (pastebin.com/u0w4tcLq)。但是,我得到了这个结果(imageshack.us/scaled/landing/407/jtable.png)。没有标题,也没有呈现的复选框。
  • 我通过将表格添加到滚动窗格来解决标题问题,但仍然没有复选框。
  • @JoelA.Christophel 请在这里更新完整的源代码。不要提供链接。你上过教程吗?请在此处复制粘贴你的完整源代码(我的意思是作为您问题的更新)。
  • @JoelA.Christophel 查看我的更新答案
  • 我让它工作了,但我如何选中/取消选中这些框?
【解决方案2】:

AFAIK 前 3 列看起来很正常。但第四列是我认为你被困在的地方。

JTable 中了解Renderer and Editor

我认为将JPanel 呈现到最后一列就可以了。在那个JPanel 上添加两个JRadioButton

一个例子是herehere

P.S:我试过这个方法,很管用。

【讨论】:

  • 感谢您的信息。 +1 我从您的回答中了解了渲染和编辑器。但是,我将使用 joey 提供的解决方案。
【解决方案3】:

我的建议是,使用复选框而不是两个单选框控件。它看起来更好。

并检查呈现的用户。

【讨论】:

  • 这应该在评论中。
  • 只需对“present”列使用布尔值。数据将自动显示为复选框。如果未选中该复选框,则学生缺席
  • @HendrikEbbers 我认为 RadioButton 看起来比使用 CheckBox 更有希望。
  • @Che 如果您的列是布尔值,复选框将自动出现,否则,将不得不使用您的答案中给出的方法。
  • @joeyrohan 我知道。只需编写 Boolean.class 就可以了。但我说的是能见度。 OP 选项很好,即使它不像复选框那样简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
  • 2020-04-15
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多