我有一个大 gui 的 JList,我删除了所有其他不相关的代码。我可以初始化列表,但在使用按钮时无法从中添加/删除项目。我读到的所有内容都说要使用DefaultListModel。然后,当您重新初始化列表时,它将自动更新列表。
我也尝试重新聚焦并重新粉刷面板和框架,但这也不起作用。
public static void main(String[] args) {
Play worker=new Play();
worker.GUI();
}
public void GUI(){
frame=new JFrame();
mainPanel=new JPanel(new GridBagLayout());
filePanel=new JPanel(new GridBagLayout());
allFilePanel=new JPanel(new GridBagLayout());
fileInputLabel=new JLabel("Enter the directory of the csv file:");
fileNameField=new JTextField(25);
readFileButton=new JButton("Read File");
ReadFileButtonListener buttonListener=new ReadFileButtonListener();
readFileButton.addActionListener(buttonListener);
addItem(filePanel,fileInputLabel , 0, 0, 1, 1, GridBagConstraints.CENTER);
addItem(filePanel,fileNameField , 1, 0, 2, 1, GridBagConstraints.CENTER);
addItem(filePanel,readFileButton , 3, 0, 1, 1, GridBagConstraints.CENTER);
allFileLabel=new JLabel("List of all Data");
String [] name={"joe"};
allFileList=new JList<String>(name);
allFileList.setVisibleRowCount(10);
addItem(allFilePanel,allFileLabel , 0, 0, 1, 1, GridBagConstraints.CENTER);
addItem(allFilePanel,allFileList , 0, 1, 1, 1, GridBagConstraints.CENTER);
addItem(mainPanel, filePanel, 0, 0, 4, 1, GridBagConstraints.CENTER);
addItem(mainPanel, allFilePanel, 1, 2, 1, 1, GridBagConstraints.CENTER);
frame.setSize(1000,800);
frame.add(mainPanel);
frame.setVisible(true);
}
/**configures the panels
* @param p
* @param c
* @param x
* @param y
* @param width
* @param height
* @param align
*/
private void addItem(JPanel p,JComponent c, int x, int y , int width,int height, int align){
GridBagConstraints gc=new GridBagConstraints();
gc.gridx=x;
gc.gridy=y;
gc.gridwidth=width;
gc.gridheight=height;
gc.weightx=100;
gc.weighty=100;
gc.insets=new Insets(5,5,5,5);
gc.fill=GridBagConstraints.NONE;
p.add(c,gc);
}
private class ReadFileButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent arg0) {
generateAllFileList();
}
}
public void generateAllFileList(){
DefaultListModel<String> list=new DefaultListModel<String>();
list.addElement("Fred");
allFileList=new JList<String>(list);
}
}
每次添加元素时,都不应该重新初始化< code>JList和< code>DefaultListModel,这样会丢失旧的元素。保持对< code > defaultlistmodel 的引用,只需调用< code>addElement(),它将通过监听由模型生成的事件来自动更新列表。
使用当前代码,您不会更新JList的列表模型,而是创建一个新的JList。然后,只需将这个新的JList分配给对面板没有影响的allFileList
成员。面板上显示的JList实例不受此操作的影响。
粗略地说(并且未经测试),应该是这样的:
public void generateAllFileList(){
DefaultListModel<String> list = allFileList.getModel();
list.addElement("Fred");
}
(当然,您必须使用默认列表模型而不是数组创建 JList)
我找到了更新数据的示例,但它使用了DefaultTableModel。当我创建自己的TableModel和自己的data类时,当我将数据添加到JTable中时,它不会更新。 有我的桌子模型: 当我添加了任何信息,但它没有更新。在JTable中,我必须把这个方法放在哪里来进行正确的数据更新?
问题内容: 是否可以在sql中执行更新语句,但仅在更新不同时才执行更新? 例如 如果在数据库中, 不应 执行任何类型的更新 但是,如果 这 应该 执行更新。 问题答案: 使用更新前触发器可以做到这一点。在此触发器中,您可以将旧值与新值进行比较,并在新值不变的情况下取消更新。但这将导致呼叫者网站上的错误。 我不知道为什么要这样做,但是这里有几种可能性: 性能:这里没有性能提升,因为更新不仅需要找到正
问题内容: 我正在尝试编写一些搜索输入,以使用ngResource从数据库中获取数据。 数据在页面上显示为ng-repeat,但是当我执行搜索并且$ scope已更新时,该视图未更新并显示旧数据。 这是代码: main.html(活动视图) main.js searchbar.js 当它启动时,它从数据库中获取所有数据并正确显示它们,当我尝试进行搜索时,$ scope.eventi会更新(我可以从
问题内容: 我正在通过ng-repeat循环渲染数据。而且我希望它在更新数组时进行更新。从我阅读的内容来看,这应该会自动发生,但是这是行不通的。那我在做什么错? 的HTML: 控制器(此功能通过ng-click在按钮上触发): Console.log显示该数组已正确更新,但是我视图中的表未更改。我不知道我在做什么错。 问题答案: 那是因为您在method中更改了数组引用。 为了避免这种情况,我们使
我现在迷路了。
问题内容: 我正在尝试将JProgressBar添加到我的程序中,但不会更新!仅当原因为100%时,该值才会更改。这是我的方法。 更改进度栏的值位于上述方法的底部。 这就是我所谓的方法。 编辑:以上根本不是问题,问题之一是程序正在使用整数除法而不是十进制。 问题答案: 是一个整数,也是。因此发生的是小数被截断。你应该做什么,就像 这样做是确保将其除以具有十进制功能的数据类型,该数据类型将返回更具包