我最近花了一些时间学习并尝试使用各种Java数据绑定工具,如JGoodies,GlazedLists,JSR-295等.我一直试图解决的问题并不是那么困难,但是代码量很大我必须写支持绑定过程,这大大超过了它提供的任何简化.
我发现所提供的工具并不适用于除了微不足道的组合和扩展之外的任何其他工具(GlazedLists特别提供了一套很好的工具,但是扩展的系统太复杂了).
我真的很喜欢数据绑定的想法,但它似乎存在严重缺陷.我错过了什么吗?
我正在使用答案/sf/answers/407425651/和http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/它可以工作,但是列的大小通常也是如此宽或太窄.
无论用HTML还是文本填充我的表格.
使用TableModel
oracle文档中的标准.
调整模式= JTable.AUTO_RESIZE_OFF
我的容器是jGoodies:
FormLayout currentEventLayout = new FormLayout(
"fill:p",
"pref, pref");
PanelBuilder currentEventBuilder = new PanelBuilder(currentEventLayout);
currentEventBuilder.add(mainQuotesTable.getTableHeader(), constraints.xy(1, 1));
currentEventBuilder.add(mainQuotesTable, constraints.xy(1, 2));
Run Code Online (Sandbox Code Playgroud)
HTML示例:
"<html><pre><font size=+1 face='Arial'>" + firstValue + "\n" + secondValue + "</font></pre></html>"
Run Code Online (Sandbox Code Playgroud)
简单的行:
firstValue + " - " + secondValue
Run Code Online (Sandbox Code Playgroud)
这是一个例子:
public class TableAdjustExample {
private static JTable mainTable;
private static Random random = new Random();
private static List<Data> data;
private static class Data {
String name;
String surname; …
Run Code Online (Sandbox Code Playgroud) 我在过去的两个小时里一直在研究JGoodies,我似乎没有找到很多关于这个主题的好文档.甚至没有在JGoodies网站上.所以它让我想知道JGoodies是一个很好的框架来用来模拟你的gui?是否有一些关于如何开始我尚未找到的好文档?
提前致谢.
轮子是一次又一次地发明的 - 至少在查看任何普通的Swing GUI项目时都是如此.
在许多领域,有一两个非常着名的库,用于标准类库不能直接寻址的东西,例如用于持久化的hibernate.
但对于GUI应用程序来说,事情似乎有点不太清楚 - 您认为哪些库对于几乎所有新的GUI项目都是必不可少的?
我建议JGoodies作为开始.对于涉及以图形方式显示数据的任何事情,可能是JFreeChart.对于更复杂的组件SwingX - 我从未使用它,但我听到它经常提到.
我知道Swing有其他选择,但至少可以坚持这个问题.
我无法找到一种在swing GUI中调整某些组件大小的方法.一些自定义标签正被添加到FlowLayout中,当调整对话框大小时,它不会表现如何.该小组正在使用jgoodies表单框架构建.
如果使用这个,将FlowLayout添加到xy(3,y)
FormLayout layout = new FormLayout("r:d, 5px, f:d:g", // columns
"p, p, 5px, p, 5px, p") // rows
Run Code Online (Sandbox Code Playgroud)
FlowLayout展开并显示滚动条
如果使用
FormLayout layout = new FormLayout("r:d, 5px, f:10:g", // columns
"p, p, 5px, p, 5px, p") // rows
Run Code Online (Sandbox Code Playgroud)
FlowLayout使用可用空间,第二行上的项目消失
我想将包含FlowLayout的每一行的高度扩展到组件的当前高度.不幸的是,首选大小始终对应于单行的高度.
另一种布局会更合适吗?左侧的粗体文本应右对齐,然后是FlowLayout.
[编辑]在试图弄清楚如何执行这几周后,实际的问题可以恢复到这样:
一组标签被添加到JPanel.此JPanel应水平使用所有可用空间(对话框大小减去标签名称标签的宽度)并根据需要垂直展开.如果JPanel的高度比对话框大,则应显示垂直滚动条(水平滚动条永远不可见).对话框可以显示多个JPanel,它们将一个接一个地显示(垂直).
这是使用GridBagLayout和WrapLayout的尝试:
public class GridBagLayoutTagPanel extends JPanel {
private static final long serialVersionUID = -441746014057882848L;
private final int NB_TAGS = 5;
public GridBagLayoutTagPanel() {
setLayout(new GridLayout());
JPanel pTags = new JPanel(new GridBagLayout());
pTags.setBackground(Color.ORANGE); …
Run Code Online (Sandbox Code Playgroud) 我添加jgoodies-looks-2.5.3.jar
到我的构建路径并启动它
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel("com.jgoodies.looks.windows.WindowsLookAndFeel");
ExpenseManagerGUI frame = new ExpenseManagerGUI();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误:(如何解决这个问题?)
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/jgoodies/common/base/SystemUtils
at com.jgoodies.looks.common.ShadowPopupFactory.install(ShadowPopupFactory.java:116)
at com.jgoodies.looks.windows.WindowsLookAndFeel.initialize(WindowsLookAndFeel.java:199)
at javax.swing.UIManager.setLookAndFeel(Unknown Source)
at javax.swing.UIManager.setLookAndFeel(Unknown Source)
at de.mayerhofersimon.expensemanager.ExpenseManagerGUI$2.run(ExpenseManagerGUI.java:94)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) …
Run Code Online (Sandbox Code Playgroud) 我们有一个JPanel,它包含多个包含JComponents的JPanel(让我们说JLabels和JTextboxes)
在每个内部JPanel内部,我们使用JGoodies Layout来确保所有标签的正确对齐.
但是,我们当然希望所有标签在它们所属的子面板上独立对齐.
如果不修复包含JLabels的列的宽度,我们怎么能这样做呢?
我们不能放弃JPanels,因为我们必须围绕组件组拥有边框
我想学习如何使用JGoodies绑定(因为bean绑定似乎在水中死了,它的fork也是如此).JGoosides绑定文档引用了教程源代码,但此代码在最新的(2.5)发行版中不可用.
在查看以前的分发版本之后,教程代码似乎被丢弃在2.0.6和2.1.0之间
我明白这个教程已经过时了吗?如果是这样,是否有一个我最不能错过的最新教程分发?
我试图将JTextField绑定到一个double
使用JGoodies绑定的bean的字段:
JTextField myJTextField = ...
BeanAdapter adapter = ...
Bindings.bind(myJTextField,
ConverterFactory.createStringConverter(adapter.getValueModel("amplitude"),
new DecimalFormat("0.00000")));
Run Code Online (Sandbox Code Playgroud)
这有效,至少在bean→JTextField方向.在JTextField→bean方向,它有一个问题:如果我开始在JTextField中输入,它会在小数点后的第一个数字后立即进行更新,弄乱JTextField焦点,并调整我的JTextField值.
(问题似乎来自尝试将GUI改编String
为模型double
)
我该如何解决????
样本程序演示了这个:
package com.example.test.gui;
import java.awt.GridLayout;
import java.beans.PropertyChangeListener;
import java.text.DecimalFormat;
import java.util.Hashtable;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import com.jgoodies.binding.adapter.Bindings;
import com.jgoodies.binding.adapter.BoundedRangeAdapter;
import com.jgoodies.binding.beans.BeanAdapter;
import com.jgoodies.binding.beans.ExtendedPropertyChangeSupport;
import com.jgoodies.binding.value.ConverterFactory;
public class FloatPointBinding {
public static class MyModel {
private int x;
final private ExtendedPropertyChangeSupport changeSupport =
new ExtendedPropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener x) {
this.changeSupport.addPropertyChangeListener(x);
}
public void removePropertyChangeListener(PropertyChangeListener …
Run Code Online (Sandbox Code Playgroud) 如果我使用JGoodies,如何更改JButton的颜色WindowsLookAndFeel
?更改颜色后,按钮在点击时仍应有一些视觉指示; 颜色渐变和点击动画不必与JGoodies中的相同.
使用setBackground()
并setForeground()
仅更改按钮轮廓和按钮文本的颜色:
import com.jgoodies.looks.windows.WindowsLookAndFeel;
...
public class Test {
public static void main(String[] args) throws UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(new WindowsLookAndFeel());
JFrame frame = new JFrame();
frame.setSize(50, 100);
JButton button = new JButton("Button");
button.setBackground(Color.GREEN);
button.setForeground(Color.RED);
button.setOpaque(true);
frame.add(button);
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我想设置按钮整个区域的颜色,而不仅仅是轮廓.(如果WindowsLookAndFeel
未使用,则会发生这种情况.)
我也试过改变颜色,com.jgoodies.looks.windows.WindowsBorders#getButtonBorder()
但这似乎没有任何影响.
jgoodies ×10
java ×9
swing ×8
alignment ×1
binding ×1
data-binding ×1
flowlayout ×1
glazedlists ×1
jtable ×1
jtextfield ×1
layout ×1
libraries ×1
resize ×1
tablecolumn ×1