小编kle*_*tra的帖子

Java JTree只扩展一级节点

使用JTree,假设根节点为0级,并且根目录下可能有多达5个级别,如何轻松扩展所有1级节点,以便所有1级和2级分支和叶子都可见,但3级及以下都没有?

java swing jtree

12
推荐指数
1
解决办法
3万
查看次数

没有鼠标的一天(Java键盘快捷键)

今天我决定制定一个解决方案,包括仅使用键盘测试我的Java应用程序.

但我遇到了一些障碍:

  1. 如何使用键盘选择/取消选中复选框?
  2. 你如何折叠/扩展项目JTree

所有帮助将不胜感激!

更新:

这是我要选择的复选框的示例:
在此输入图像描述

PS:空间不起作用

java keyboard swing keyboard-shortcuts

12
推荐指数
1
解决办法
664
查看次数

Java JTable改变单元格颜色

我想制作一个可编辑的表,然后检查数据以确保其有效.我不知道如何改变一个细胞的颜色.我想获得一个单元格,例如(0,0)并将前景颜色设置为红色.我已经阅读了SO以及Oracle关于自定义ColorRenderer的其他帖子,但我只是不知道如何使用它.

谢谢.

java swing jtable colors

11
推荐指数
1
解决办法
7万
查看次数

如何将JTable列调整为字符串长度?

我有一个JTable,它将最后一列数据字段更改为不同的字符串值.我想将列调整为字符串长度.字符串长度与宽度的公式是什么?

我将要使用JTable.getColumnModel().getColumn().setPreferredWidth()所以我想知道如何将字符串长度转换为宽度值.

java swing jtable

11
推荐指数
2
解决办法
2万
查看次数

添加一个TableRowSorter添加值来建模原因java.lang.IndexOutOfBoundsException后:无效范围

将TableRowSorter添加到表及其对应的模型之后,任何相应的添加都会特别添加firetabletablerowsinserted导致异常.从测试中可以清楚地看出,GetRowCount()返回的值超出了模型范围.但是,添加分拣机或过滤器后,如何继续向表中添加值对我没有意义?

作为一个例子,我在向表中添加任何内容之前设置行过滤器,然后在我的模型中使用以下调用向表中添加一个值:

this.addRow(row, createRow(trans,row));
this.fireTableRowsInserted(this.getRowCount(), this.getRowCount());
Run Code Online (Sandbox Code Playgroud)

rowcount的大小为1,抛出异常:

java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.checkAgainstModel(Unknown Source)
at javax.swing.DefaultRowSorter.rowsInserted(Unknown Source)
at com.gui.model
Run Code Online (Sandbox Code Playgroud)

如果我在没有先添加分拣机的情况下执行相同的步骤,一切都很好.我假设我可能需要通知模型分拣机可能已经进行了更改并尝试了以下但仍然返回异常:

this.addRow(row, createRow(trans,row));
this.fireTableStructureChanged()
this.fireTableRowsInserted(this.getRowCount(), this.getRowCount());
Run Code Online (Sandbox Code Playgroud)

我甚至试图通知模型内部的分拣机,在调用fire之前已经将一个值添加到模型中,但是它也失败了:

 this.addRow(row, createRow(trans,row));
 if(sorter.getRowFilter() != null){
      //if a sorter exists we are in add notify sorter
      sorter.rowsInserted(getRowCount(), getRowCount());
  }
  this.fireTableRowsInserted(this.getRowCount(), this.getRowCount());
Run Code Online (Sandbox Code Playgroud)

最后,我对FireTableRowsInsterted(0,0)进行了硬编码,并且不会抛出任何异常.但没有任何东西被添加到表中?所以,我知道这绝对是某种类型的OutOfBounds问题.我看了一遍,似乎无法找到答案.如果有人知道这是如何工作的,那将是非常有帮助的.以下是在jpanel中设置分拣机的代码:

    messageTable.setRowSorter(null);
     HttpTransactionTableModel m = getTransactionTableModel();
     final int statusIndex = m.getColIndex("status");
     RowFilter<Object,Object> startsWithAFilter = new RowFilter<Object,Object>() {
           public boolean include(Entry<? extends Object, ? extends Object> entry) {

               for(char responseCode:responseCodes)
               {
                   if (entry.getStringValue(statusIndex).startsWith(Character.toString(responseCode))) {
                         return true; …
Run Code Online (Sandbox Code Playgroud)

swing jtable tablerowsorter

11
推荐指数
1
解决办法
1万
查看次数

WatchService和SwingWorker:如何正确地做到这一点?

WatchService听起来像一个令人兴奋的想法...不幸的是,它似乎与教程/ api plus中警告的低水平并不真正适合Swing事件模型(或者我错过了一些明显的,非零概率

从教程中的 WatchDir 示例中获取代码(只是为了处理单个目录),我基本上结束了

  • 扩展SwingWorker
  • 在构造函数中执行注册工作
  • 把无限循环放在doInBackground中等待一个键
  • 通过key.pollEvents()检索时发布每个WatchEvent
  • 通过使用已删除/创建的文件作为newValue触发propertyChangeEvents来处理块

    @SuppressWarnings("unchecked")
    public class FileWorker extends SwingWorker<Void, WatchEvent<Path>> {
    
        public static final String DELETED = "deletedFile";
        public static final String CREATED = "createdFile";
    
        private Path directory;
        private WatchService watcher;
    
        public FileWorker(File file) throws IOException {
            directory = file.toPath();
            watcher = FileSystems.getDefault().newWatchService();
            directory.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
        }
    
        @Override
        protected Void doInBackground() throws Exception {
            for (;;) {
                // wait for key to be signalled
                WatchKey key;
                try {
                    key = …
    Run Code Online (Sandbox Code Playgroud)

java swing nio swingworker watchservice

11
推荐指数
1
解决办法
4494
查看次数

记住鼠标点击的位置?的ArrayList?哈希码?

对不起,伙计们,我删除了我的APPLES和CATS示例:)这是我的问题的更新版本!

我在这里失去理智.我需要能够启发我的人.我曾尝试过几次在这里解释我的问题.希望这次,我的问题会更容易理解.

基本上我有这个框架,并显示一个图像.右侧有一个JList,底部有另一个JLabel面板.这是我框架的屏幕截图.

在此输入图像描述

当我点击图像时,会弹出一个JOptionPane,就像这样.我输入了我的输入.我的JList是一个ArrayList,所以我输入的所有内容都被添加到JList和底部的JPanel.

在此输入图像描述

现在,当我将鼠标悬停在我点击的部分时,你注意到方形消失了).它仅在我单击图像时出现,并且当我将标签悬停在底部时.我的标签,截至目前是LOLZ NOSE和INPUT HERE.

在此输入图像描述

我想要做的是当我将鼠标悬停在标签上时,例如INPUT HERE,它再次显示正方形,其中包含我点击的部分.我现在的问题是,当我点击NOSE时,它应该在鼻子部分显示一个正方形,并且名字NOSE有黑色bg,它不显示.此外,仅显示最后一个标签的正方形,而忽略其他标签的位置点击.

如何获得标签以记住我所做的点击的位置?人们说我应该使用ArrayLists或HashCodes但是我不知道如何实现它们.感谢任何能提供帮助的人.

编辑:我已经完成了矩形,顺便说一句.它仅显示输入的最后一个标签.以下是一些要求的代码片段!

我如何在JLabel上设置文本并更新JList:

public void updateLabel(){

        StringBuilder text = new StringBuilder(); //creates empty builder, capacity 16

        for(Object s: tagModel.toArray()) //returns an array containing the elements of the tagModel
            text.append(" " + s);

        repaint();      
        hoverLabel.setText(text.toString()); //returns a String
        hoverLabel.addMouseMotionListener(this);
        hoverPanel.add(hoverLabel);

    }
Run Code Online (Sandbox Code Playgroud)

点击后我的mouseListener:

@Override
    public void mouseClicked(MouseEvent event) {
        // TODO Auto-generated method stub

        x = event.getX();
        y = event.getY();

        isRectPresent = true;
        repaint();

        input = JOptionPane.showInputDialog("Enter tag name:");

        if((input != null) && …
Run Code Online (Sandbox Code Playgroud)

java swing arraylist jlabel jlist

11
推荐指数
1
解决办法
1543
查看次数

从JButton中删除三个"......"?

嘿,我正在创建一个计算器程序,有一些小按钮,我希望其中一个按钮上有"Ans",但每当我让JButton小于50,50时,它会显示三个点."......",如何删除这些点并显示给出的正常文本?

java swing jbutton

10
推荐指数
1
解决办法
9950
查看次数

Android活动 - 远程服务aidl双向连接

我有两个问题:

  1. 我知道对于连接活动远程服务,我必须使用AIDL.我尝试了这个,它的工作,但我只能找到一种方式连接的例子.简单来说 - 从服务中读取一些东西(按活动).但我需要解决将一些数据发送到活动(由服务或从服务).它非常重要,因为服务必须在事件发生后立即向活动发送一些信息(从网络获取数据).
  2. 是否可以从远程服务再次关闭应用程序(活动)?

任何建议将不胜感激.

问候

ARTIK

android

10
推荐指数
1
解决办法
4032
查看次数

获取'尝试改变通知'例外

我的目标是实现用户写入JTextPane的关键字的蓝色着色.这就是我的代码的样子:

private class DocumentHandler implements DocumentListener {

        @Override
        public void changedUpdate(DocumentEvent ev) {
        }

        @Override
        public void insertUpdate(DocumentEvent ev) {
            highlight();
        }

        @Override
        public void removeUpdate(DocumentEvent ev) {
            highlight();
        }

        private void highlight() {
            String code = codePane.getText();
            SimpleAttributeSet defSet = new SimpleAttributeSet();
            StyleConstants.setForeground(defSet, Color.BLACK);
            doc.setCharacterAttributes(0, code.length(), defSet, true);
            SimpleAttributeSet set = new SimpleAttributeSet();
            StyleConstants.setForeground(set, Color.BLUE);
            for (String keyword : keywords) {
                Pattern pattern = Pattern.compile(keyword + "(\\[\\])*");
                Matcher matcher = pattern.matcher(code);
                while (matcher.find()) {

                    //Just for test
                    System.out.print("Start index: …
Run Code Online (Sandbox Code Playgroud)

java swing jtextpane

10
推荐指数
1
解决办法
1万
查看次数