使用JTree,假设根节点为0级,并且根目录下可能有多达5个级别,如何轻松扩展所有1级节点,以便所有1级和2级分支和叶子都可见,但3级及以下都没有?
今天我决定制定一个解决方案,包括仅使用键盘测试我的Java应用程序.
但我遇到了一些障碍:
JTree?所有帮助将不胜感激!
更新:
这是我要选择的复选框的示例:

PS:空间不起作用
我想制作一个可编辑的表,然后检查数据以确保其有效.我不知道如何改变一个细胞的颜色.我想获得一个单元格,例如(0,0)并将前景颜色设置为红色.我已经阅读了SO以及Oracle关于自定义ColorRenderer的其他帖子,但我只是不知道如何使用它.
谢谢.
我有一个JTable,它将最后一列数据字段更改为不同的字符串值.我想将列调整为字符串长度.字符串长度与宽度的公式是什么?
我将要使用JTable.getColumnModel().getColumn().setPreferredWidth()所以我想知道如何将字符串长度转换为宽度值.
将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) WatchService听起来像一个令人兴奋的想法...不幸的是,它似乎与教程/ api plus中警告的低水平并不真正适合Swing事件模型(或者我错过了一些明显的,非零概率
从教程中的 WatchDir 示例中获取代码(只是为了处理单个目录),我基本上结束了
通过使用已删除/创建的文件作为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)对不起,伙计们,我删除了我的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) 嘿,我正在创建一个计算器程序,有一些小按钮,我希望其中一个按钮上有"Ans",但每当我让JButton小于50,50时,它会显示三个点."......",如何删除这些点并显示给出的正常文本?
我有两个问题:
任何建议将不胜感激.
问候
ARTIK
我的目标是实现用户写入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)