什么是getSource?它返回了什么?
什么是getActionCommand()以及它返回什么?
我对这两个人之间的困惑可以让任何人给予我或将它们区分给我吗?在UI中使用getSource和getActionCommand()有什么用?特别是TextField还是JTextField?
我正在使用此表在表视图中显示数据:
import javafx.application.Application;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Pagination;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;
public class MainApp extends Application
{
IntegerProperty intP = new SimpleIntegerProperty(5);
AnchorPane anchor = new AnchorPane();
Scene scene;
ObservableList<Integer> options
= FXCollections.observableArrayList(
5,
10,
15,
20);
final ComboBox comboBox = new ComboBox(options);
final ObservableList<Person> data = FXCollections.observableArrayList(
new Person("1", "Joe", "Pesci"), …Run Code Online (Sandbox Code Playgroud) 在某些情况下,有必要检测 - 在ListChangeListener中,无需控制列表本身 - "所有数据被换出",当我们需要清除某些状态时选择 - 在全新数据上,旧状态毫无意义.
可以通过以下方式获得完整的新数据
考虑可以在setAll上触发哪种类型的更改(c是更改,items是观察到的列表,"subChangeCount"用于计算子更改的伪代码):
// initially empty
assertEquals(0, items.size());
items.setAll(1, 2, 4);
assertEquals(1, c.subChangeCount());
assertTrue(c.wasAdded() && !c.wasReplaced());
assertEquals(0, c.getFrom());
assertEquals(c.getList().size(), c.getAddedSize());
// initially not empty
assertTrue(items.size() > 0);
items.setAll(1, 2, 4);
assertEquals(1, c.subChangeCount());
assertTrue(c.wasReplaced());
assertEquals(0, c.getFrom());
assertEquals(c.getList().size(), c.getAddedSize());
Run Code Online (Sandbox Code Playgroud)
这似乎允许实用程序检查,如:
boolean wasSetOrClearedAll(Change c) {
if (c.getList().isEmpty()) return true;
c.next();
if (c.getAddedSize() == c.getList().size()) return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
相比之下,内部fx代码,在收听ComboBox的项目时:
while (c.next()) {
comboBox.wasSetAllCalled = comboBox.previousItemCount == c.getRemovedSize();
...
}
comboBox.previousItemCount = getItemCount();
Run Code Online (Sandbox Code Playgroud)
存储旧的itemCount并将其与当前的removedSize进行比较(我感到很不舒服,旧状态经常因我的口味而变得陈旧),但是我很有可能在我的方法中遗漏了一些东西.
问题是: …
我们使用DefaultMutableTreeNodeJava中指定的树结构.
有没有办法遍历它,这是内置的?
如果没有,请提出其他技巧.
刚刚开始玩jdk9 - 并且刚刚开始时卡住了:
此时,我可以使用jre/jdk(在eclipse.ini中使用/ out vm参数)在我的默认java(8u60)上运行eclipse并使用java 9支持.
下一步,我想用java 9运行eclipse:将vm-arg添加到eclipse.ini,现在eclipse使用冗长的错误日志中止其启动(ini和log都显示在下面).
哪里出了问题?
我的ini:
-startup
plugins/org.eclipse.equinox.launcher_1.3.200.v20151021-1308.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.300.v20151013-1129
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vm
d:\java\jdk\190_ea\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
Run Code Online (Sandbox Code Playgroud)
错误日志的顶部(它> 900k)
!SESSION 2016-01-22 14:31:55.974 -----------------------------------------------
eclipse.buildId=4.6.0.I20151209-2300
java.version=9-ea
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_DE
Framework arguments: -product org.eclipse.epp.package.java.product
Command-line arguments: -os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.java.product
!ENTRY org.eclipse.equinox.common 4 0 2016-01-22 14:31:57.113
!MESSAGE FrameworkEvent ERROR
!STACK 0 …Run Code Online (Sandbox Code Playgroud) 只是(令人惊讶地;-)注意到应用程序在我的win6 +机器上看起来如此拥挤的原因(同样适用于Vista和Win7,都有120dpi设置,jdk6和jdk7):从桌面属性查找的控件字体都有错误的字体家庭和错误的大小:
public static void main(String[] args) {
Font guiFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty("win.defaultGUI.font");
int guiSize = guiFont.getSize();
Font iconFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty("win.icon.font");
System.out.println("gui default: " + guiFont + "\nicon default: " + iconFont);
}
Run Code Online (Sandbox Code Playgroud)
输出:
gui default: java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=13]
icon default: java.awt.Font[family=Segoe UI,name=Segoe UI,style=plain,size=15]
Run Code Online (Sandbox Code Playgroud)
后者几乎用于所有文本的本机应用程序,而Swing使用前者...
问题:
解决最后一个的选项:
编辑
万一有人感兴趣,这是肮脏的黑客:
/**
* Replaces the default gui desktop font property with the icon font
* if the former is smaller.
*
*/
public static void …Run Code Online (Sandbox Code Playgroud) 我有下一个代码:
listModel = new DefaultListModel();
listModel.addElement(dateFormat.format(new Date()) + ": Msg1");
messageList = new JList(listModel);
messageList.setLayoutOrientation(JList.VERTICAL);
messageScrollList = new JScrollPane(messageList);
messageScrollList.setPreferredSize(new Dimension(500, 200));
messageScrollList.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
e.getAdjustable().setValue(e.getAdjustable().getMaximum());
}
});
Run Code Online (Sandbox Code Playgroud)
它会自动向下滚动.但是,如果我尝试向上滚动以重新阅读消息,则会强制向下滚动.我怎样才能解决这个问题?
我有一个Jtable,我称之为方法
table1.setAutoCreateRowSorter(true);.所以这很好用.但我在我的JFrame类中也有一个方法,当我按下按钮时会触发它.它使用此代码获取选定的行索引
int selectedRows[] = this.table1.getSelectedRows();.并显示所选间隔中对应的第一行的编辑窗口.
问题是,如果我没有点击列的标题(我的意思是我根本不对它们进行排序),我的方法是完美的.但是当我对行进行排序时,行的索引似乎根本没有变化 - 从而导致旧行的编辑窗口最初在进行任何排序之前处于该位置.
我正在使用JDK 6可以给任何提示吗?
使用JTree,假设根节点为0级,并且根目录下可能有多达5个级别,如何轻松扩展所有1级节点,以便所有1级和2级分支和叶子都可见,但3级及以下都没有?