- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的 JTable 中实现 2 个不同的行过滤器。我已经实现了一个似乎完美无缺的工作,但我的第二个似乎没有工作。在下面的代码中,我注释掉了一些数据部分并放入了示例数据,这样它就可以在没有其他文件的情况下工作。
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.lang.*;
import java.awt.event.*;
///////////
import javax.swing.border.EmptyBorder;
import javax.swing.event.*;
import javax.swing.text.Document;
import javax.swing.table.TableRowSorter;
public class CompFrame extends JFrame implements ActionListener
{
/*AthleteList a = new AthleteList();
TrainingRList r= new TrainingRList();
TrainingSList s= new TrainingSList();
TrainingCList c= new TrainingCList();
TrainingPList p= new TrainingPList();
*/
JFrame myMainWindow = new JFrame("This is my title");
JPanel firstPanel = new JPanel(); //a panel for first tab
//first panel components
JScrollPane myScrollTable;
/*JLabel Logol = new JLabel();
ImageIcon imgAddAthleteLogo = new ImageIcon("AddAthletelogo.png"); //Declares as an ImageIcon
Image tempOriginal = imgAddAthleteLogo.getImage(); //Declares the ImageIcon as an Image
Image smallerLogo = tempOriginal.getScaledInstance(1280,120,0); //Rescales the Image to specified size
ImageIcon smalltest= new ImageIcon(smallerLogo); //Creates a new ImageIcon with the rescaled image
JLabel Logo = new JLabel(smalltest); //Puts the new ImageIcon inside a JLabel so that it can be displayed */
JButton btnAdminOnly = new JButton();
JButton btnTPersonal = new JButton();
JButton btnTRunning = new JButton();
JButton btnTCycling = new JButton();
JButton btnTSwimming = new JButton();
//end first panel
JTextField filterAthID;
JTextField filterForeName;
TableRowSorter sorter;
JLabel AthleteID = new JLabel();
JLabel ForeName = new JLabel();
///////////////
public void runGUI()
{
/*//////////////
a.readAthleteDataFromFile();
c.readCycling();
p.readPersonal();
r.readRunning();
s.readSwimming();
//////////////
a.athData();
//c.tcData();
//p.tpData();
//r.trData();
//s.tsData();
//////////////*/
myMainWindow.setBounds(10, 10, 1296, 756); //set position, then dimensions
myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myMainWindow.setLayout(new GridLayout(1,1));
createFirstPanel(); //call method to create each panel
myMainWindow.getContentPane().add(firstPanel); //adds the tabbedpane to mainWindow
myMainWindow.setVisible(true); //make the GUI appear
}
public void createFirstPanel()
{
firstPanel.setLayout(null);
/*
Logo.setLocation(0,0); //Sets the location
Logo.setSize(1280,120); //Sets the size
firstPanel.add(Logo); //Adds it to the panel
*/
AthleteID.setLocation(200,120); //Sets the location
AthleteID.setSize(150,26); //Sets the size
AthleteID.setText("Athlete ID Search:");
firstPanel.add(AthleteID); //Adds it to the panel
ForeName.setLocation(731,120); //Sets the location
ForeName.setSize(150,26); //Sets the size
ForeName.setText("Athlete Name Search:");
firstPanel.add(ForeName); //Adds it to the panel
btnAdminOnly.setLocation(0,120);
btnAdminOnly.setSize(200,50);
btnAdminOnly.setText("Display Athlete Data Admin");
btnAdminOnly.addActionListener(this);
firstPanel.add(btnAdminOnly);
btnTPersonal.setLocation(0,170);
btnTPersonal.setSize(200,50);
btnTPersonal.setText("Display Athlete Data");
btnTPersonal.addActionListener(this);
firstPanel.add(btnTPersonal);
btnTRunning.setLocation(0,220);
btnTRunning.setSize(200,50);
btnTRunning.setText("Display Running Data");
btnTRunning.addActionListener(this);
firstPanel.add(btnTRunning);
btnTCycling.setLocation(0,270);
btnTCycling.setSize(200,50);
btnTCycling.setText("Display Cycling Data");
btnTCycling.addActionListener(this);
firstPanel.add(btnTCycling);
btnTSwimming.setLocation(0,320);
btnTSwimming.setSize(200,50);
btnTSwimming.setText("Display Swimming Data");
btnTSwimming.addActionListener(this);
firstPanel.add(btnTSwimming);
String[] sHeaders = {"Athlete ID","Forename","Surname"};
String[][] sSampleData = new String[3][3]; //rows,cols
sSampleData[0][0] = "JS96";
sSampleData[0][1] = "John";
sSampleData[0][2] = "Smith";
sSampleData[1][0] = "DB67";
sSampleData[1][1] = "David";
sSampleData[1][2] = "Bower";
sSampleData[2][0] = "LL87";
sSampleData[2][1] = "Lex";
sSampleData[2][2] = "Luthor";
JTable athTable = new JTable(sSampleData,sHeaders);
/*JTable tpTable = new JTable(a.compTableData,aHeaders);
JTable trTable = new JTable(a.compTableData,aHeaders);
JTable tcTable = new JTable(a.compTableData,aHeaders);
JTable tsTable = new JTable(a.compTableData,aHeaders);
*/
athTable.setAutoCreateRowSorter(true);
myScrollTable = new JScrollPane(athTable);
myScrollTable.setSize(1082,600);
myScrollTable.setLocation(200,145);
System.out.println("Creating compare table");
///////////////
sorter = new TableRowSorter(athTable.getModel());
athTable.setRowSorter(sorter);
filterAthID = new JTextField(10);
filterAthID.setSize(425,26);
filterAthID.setLocation(306,120);
filterAthID.setToolTipText("Enter Athlete ID");
firstPanel.add(filterAthID);
filterForeName = new JTextField(10);
filterForeName.setSize(425,26);
filterForeName.setLocation(857,120);
filterForeName.setToolTipText("Enter Athlete Name");
firstPanel.add(filterForeName);
//////////////////////
Document doc = filterAthID.getDocument();
DocumentListener listener = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e)
{
newFilter();
}
@Override
public void removeUpdate(DocumentEvent e)
{
newFilter();
}
@Override
public void changedUpdate(DocumentEvent e)
{
newFilter();
}
};
doc.addDocumentListener(listener);
///////////////
Document docb = filterForeName.getDocument();
DocumentListener listenerb = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e)
{
newFilterb();
}
@Override
public void removeUpdate(DocumentEvent e)
{
newFilterb();
}
@Override
public void changedUpdate(DocumentEvent e)
{
newFilterb();
}
};
docb.addDocumentListener(listenerb);
///////////////
firstPanel.add(myScrollTable);
}
private void newFilter()
{
RowFilter rf = null;
try
{
rf = RowFilter.regexFilter(filterAthID.getText(), 0);
}
catch (java.util.regex.PatternSyntaxException e)
{
return;
}
sorter.setRowFilter(rf);
}
private void newFilterb()
{
RowFilter rf = null;
try
{
rf = RowFilter.regexFilter(filterAthID.getText(), 1);
}
catch (java.util.regex.PatternSyntaxException e)
{
return;
}
sorter.setRowFilter(rf);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == btnAdminOnly)
{
firstPanel.remove(myScrollTable);
firstPanel.add(myScrollTable);
firstPanel.repaint();
System.out.println("Changing table to athTable");
}
if(e.getSource() == btnTPersonal)
{
firstPanel.remove(myScrollTable);
firstPanel.repaint();
System.out.println("Changing table to tpTable");
}
if(e.getSource() == btnTRunning)
{
firstPanel.remove(myScrollTable);
firstPanel.repaint();
System.out.println("Changing table to trTable");
}
if(e.getSource() == btnTCycling)
{
firstPanel.remove(myScrollTable);
firstPanel.repaint();
System.out.println("Changing table to tcTable");
}
if(e.getSource() == btnTSwimming)
{
firstPanel.remove(myScrollTable);
firstPanel.repaint();
System.out.println("Changing table to tsTable");
}
}
public static void main(String[] args)
{
CompFrame cf = new CompFrame();
cf.runGUI();
}
}
谁能告诉我问题出在哪里并告诉我如何解决?此外,如果有人在 filterAthID 中搜索了某些内容,然后开始在 filterForeName 中键入内容,这是否可行?通过工作,我的意思是通过输入的数据进一步过滤剩余的结果。如果没有,有没有办法结束这个?如果有办法克服这个问题,您能解释一下吗?
最佳答案
In the following code I have commented out a few parts of data and put in sample data so it works without other files.
不要只是注释掉代码,将它从我们不感兴趣的帖子中删除。
另外,为什么要包含按钮的所有代码?这些按钮与问题无关,因此我们不想通读所有代码。阅读的代码越少,我们就越有可能找到问题。
however my second one does not appear to work.
在我看来你有错字:
//rf = RowFilter.regexFilter(filterAthID.getText(), 1);
您应该使用过滤器的名称(而不是 ID):
rf = RowFilter.regexFilter(filterForeName.getText(), 1);
编辑:
同时过滤两列的例子:
List<RowFilter<Object,Object>> filters = new ArrayList<RowFilter<Object,Object>>(2);
filters.add(RowFilter.regexFilter(textField1.getText(), 0));
filters.add(RowFilter.regexFilter(textField2.getText(), 1));
rf = RowFilter.andFilter(filters);
关于java - 在两列中过滤 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106565/
我正在 csv 上使用 hadoop 来分析一些数据。我使用sql/mysql(不确定)来分析数据,现在陷入了僵局。 我花了好几个小时在谷歌上搜索,却没有找到任何相关的东西。我需要一个查询,在该查询中
我正在为 Bootstrap 网格布局的“简单”任务而苦苦挣扎。我希望在大视口(viewport)上有 4 列,然后在中型设备上有 2 列,最后在较小的设备上只有 1 列。 当我测试我的代码片段时,似
对于这个令人困惑的标题,我深表歉意,我想不出这个问题的正确措辞。相反,我只会给你背景信息和目标: 这是在一个表中,一个人可能有也可能没有多行数据,这些行可能包含相同的 activity_id 值,也可
具有 3 列的数据库表 - A int , B int , C int 我的问题是: 如何使用 Sequelize 结果找到 A > B + C const countTasks = await Ta
我在通过以下功能编写此查询时遇到问题: 首先按第 2 列 DESC 排序,然后从“不同的第 1 列”中选择 只有 Column1 是 DISTINCT 此查询没有帮助,因为它首先从第 1 列中进行选择
使用 Bootstrap 非常有趣和有帮助,目前我在创建以下需求时遇到问题。 “使用 bootstrap 在桌面上有 4 列,在平板电脑上有 2 列,在移动设备上有 1 列”谁能告诉我正确的结构 最佳
我是 R 新手,正在问一个非常基本的问题。当然,我在尝试从所提供的示例中获取指导的同时做了功课here和 here ,但无法在我的案例中实现这个想法,即可能是由于我的问题中的比较维度更大。 我的实
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个 df , delta1 delta2 0 -1 2 0 -1 0 0 0 我想知道如何分配 delt
您好,我想知道是否可以执行以下操作。显然,我已经尝试在 phpMyAdmin 中运行它,但出现错误。也许还有另一种方式来编写此查询。 SELECT * FROM eat_eat_restaurants
我有 2 个列表(标题和数据值)。我想要将数据值列 1 匹配并替换为头文件列 1,以获得与 dataValue 列 1 和标题值列 2 匹配的值 头文件 TotalLoad,M0001001 Hois
我有两个不同长度的文件,file2 是一个很大的引用文件,我从中提取文件 1 的数据。 我有一行 awk,我通常会对其进行调整以在我的文件中进行查找和替换,但它总是在同一列中进行查找和替换。 所以对于
假设我有两个表,如下所示。 create table contract( c_ID number(1) primary key, c_name varchar2(50) not
我有一个带有 varchar 列的 H2 表,其检查约束定义如下: CONSTRAINT my_constraint CHECK (varchar_field <> '') 以下插入语句失败,但当我删
这是最少量的代码,可以清楚地说明我的问题: One Two Three 前 2 个 div 应该是 2 个左列。第三个应该占据页面的其余部分。最后,我将添加选项来隐藏和
在 Azure 中的 Log Analytics 中,我为 VM Heartbeat 选择一个预定义查询,我在编辑器中运行查询正常,但当我去创建警报时,我不断收到警报“查询未返回 TimeGenera
在 Azure 中的 Log Analytics 中,我为 VM Heartbeat 选择一个预定义查询,我在编辑器中运行查询正常,但当我去创建警报时,我不断收到警报“查询未返回 TimeGenera
今天我开始使用 JexcelApi 并遇到了这个:当您尝试从特定位置获取元素时,不是像您通常期望的那样使用sheet.getCell(row,col),而是使用sheet.getCell(col,ro
我有一个包含 28 列的数据库。第一列是代码,第二列是名称,其余是值。 public void displayData() { con.Open(); MySqlDataAdapter
我很沮丧:每当我缩小这个网页时,一切都变得一团糟。我如何将网页居中,以便我可以缩小并且元素不会被错误定位。 (它应该是 2 列,但所有内容都合并为 1)我试过 但由于某种原因,这不起作用。 www.o
我是一名优秀的程序员,十分优秀!