我已经阅读/试过这些帖子,但这没有帮助:
我需要的是一个ListCellRenderer
返回左侧带有图标的面板和右侧的动态长度文本(如在任何论坛中:左侧是用户头像,右侧是帖子文本).这些文本不为我所知,所以我无法设置固定的单元格高度.此外,文本长度不同于列表单元格到列表单元格.因此,每个列表单元格都需要自己的高度,具体取决于文本的长度.实际上是一个非常常见的布局...但不适用于Swing.单元格高度不会根据文本长度扩展.
我已经阅读了几乎所有有关动态单元格高度和多行文本的帖子JList
,但找不到解决方案.所以我决定给一个小型的SSCCE.请告诉我如何实现我所描述的内容,或者如果您认为这很容易,请修改我的代码.
谢谢
这是SSCCE:
public class MultiLineList extends JFrame
{
private static final long serialVersionUID = 1L;
public static void main(final String[] args)
{
new MultiLineList();
}
private MultiLineList()
{
setTitle("MultiLineList");
setSize(800, 450);
setResizable(true);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.getContentPane().setLayout(new BorderLayout());
final DefaultListModel model = new DefaultListModel();
model.addElement("This is a short text");
model.addElement("This is a long text. This is a long text. This is a long text. This is a long text. This …
Run Code Online (Sandbox Code Playgroud) 我在JPanel中有一个搜索域.JPanel有一个背景图片.我想在这个面板中放置一个JTextField,但是JTextField应该有一个透明的边框,所以它有一些填充到顶部和底部,你应该看到面板的背景图像.
我在这里有一个SSCCE,其中面板有蓝色背景而不是背景图像.我希望文本字段是白色的,但周围有一个边框,让你看到它下方的蓝色面板.透明边框会很棒,但EmptyBorder不起作用.这是SSCCE:
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TransparentBorder
{
public TransparentBorder()
{
//Create and set up the window.
final JFrame frame = new JFrame("Transparent Border");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 100);
// set window size
frame.setUndecorated(false);
//P1
final JPanel panel = new JPanel(new BorderLayout());
panel.setBackground(Color.BLUE);
final JButton btn = new JButton("Search");
btn.setOpaque(false);
panel.add(btn, BorderLayout.EAST);
final JTextField field = new JTextField();
field.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
// field.setOpaque(false);
panel.add(field);
frame.add(panel);
//Display the window.
// …
Run Code Online (Sandbox Code Playgroud) 请看一下SSCCE.如何使未选择的树节点的背景透明.目前,未选择节点的背景为白色.但是,我的单元格渲染器应该将其绘制为非透明(如果未选中)(选择时为绿色......它的作用).最后,我希望非选定节点只是没有背景的文本,因为SSCCE中红色的区域在我的应用程序中有一个渐变填充.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
public class SimpleTree extends JFrame
{
public static void main(final String[] args)
{
new SimpleTree();
}
public SimpleTree()
{
super("Creating a Simple JTree");
final Container content = this.getContentPane();
content.setBackground(Color.RED);
final Object[] hierarchy = { "javax.swing", "javax.swing.border", "javax.swing.colorchooser", "javax.swing.event", "javax.swing.filechooser", new Object[] { "javax.swing.plaf", "javax.swing.plaf.basic", "javax.swing.plaf.metal", "javax.swing.plaf.multi" }, "javax.swing.table",
new Object[] { "javax.swing.text", new Object[] { "javax.swing.text.html", "javax.swing.text.html.parser" }, "javax.swing.text.rtf" }, "javax.swing.tree", …
Run Code Online (Sandbox Code Playgroud) 我想要一个没有箭头按钮(完成)的JComboBox,它在启用时具有绿色背景,在禁用时具有灰色背景(未完成).我还为下拉列表使用了自定义渲染器(完成)
我检查了BasicComboBoxUI的源代码并试图覆盖一些方法,但没有任何反应.下拉列表始终具有灰色/蓝色背景.
这是我最近一次尝试的SSCCE.我尝试了我能想到的一切.请给我一个提示,我迷路了.
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.plaf.basic.BasicComboBoxUI;
public class DropDownBackground
{
public static void main(final String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
final JComboBox dropdown = new JComboBox(new DefaultComboBoxModel(new String[] { "one", "two", "three" }));
dropdown.setRenderer(new ComboBoxListCellRenderer());
dropdown.setUI(new BasicComboBoxUI()
{
@Override
public void paint(final Graphics g, final JComponent c) …
Run Code Online (Sandbox Code Playgroud) 是否可以仅隐藏图例中的某些系列.
我有一个组合图表包含:
全部显示为一个堆叠列.
并且:
全部显示为同一图表中的单独行.
现在"A的量"具有与"A的量/秒"相同的颜色.此颜色应仅在图例中显示一次并标记为"A".
是否可以使用Google Charts实现这一目标?如果是这样,怎么样?
我有一个工业触摸屏的平板设备的运行的windows7(这一个).它有一个集成的RFID /条形码扫描仪和相机.两者都可以通过硬件按钮启动.我想知道,只要按下其中一个按钮.我用GlobalKeyEventListener编写了一个小测试应用程序,但是当按下其中一个按钮时,不会触发任何事件.触发所有正常的键盘事件.有谁知道,是否以及如何在Java中访问这些类型的按钮事件?在告诉客户之前,我还应该尝试什么呢?谢谢.
我创建了自己的MyScrollbarUI
类,在我的应用程序中有一个自定义滚动条外观.现在我必须这样做
scrollPane.getHorizontalScrollBar().setUI(new MyScrollbarUI());
scrollPane.getVerticalScrollBar().setUI(new MyScrollbarUI());
Run Code Online (Sandbox Code Playgroud)
在ScrollPane
我使用的任何.
是否有可能告诉Swing
它应该MyScrollbarUI
在任何滚动条上使用它.也许通过UIManager
?
这应该很容易,但我无法弄清楚如何.有没有办法找出安装的JavaFX版本.我并不是指以编程方式通过System.getProperty("javafx.runtime.version")
,虽然安装了JavaFX,但它会在我的计算机上返回一个空字符串.
我宁愿java -version
在控制台上有类似的东西,但为了获得JavaFX版本.
或者,只要知道是否安装了JavaFX就足够了.我只是有一些客户无法运行我的swing/javaFX应用程序,并想告诉他们检查是否安装了JavaFX.
我有一个简单的问题让我疯狂.
我有一个JList,并希望它的单元格根据其内容进行扩展,这是可变长度的文本.
所以我创建了一个CustomCellRenderer,如下所示:
@Override
public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean hasFocus)
{
final String text = (String) value;
final JTextArea ta = new JTextArea();
ta.setText(text);
ta.setFont(new Font("Dialog", Font.PLAIN, (int) Theme.FONTSIZE_TEXT));
ta.setForeground(Theme.FONTCOLOR_CONTENT);
ta.setLineWrap(true);
ta.setWrapStyleWord(true);
ta.setColumns(0);
ta.setBorder(BorderFactory.createEmptyBorder(10, Theme.PADDING, 0, 0));
return ta;
}
Run Code Online (Sandbox Code Playgroud)
但是单元格只有一个文本行高,而JTextArea的其余部分被截断.如果我加
ta.setPreferredSize(new Dimension(0, 70));
Run Code Online (Sandbox Code Playgroud)
我的行高为70,我可以看到更多JTextArea的文本,但仍然不是一切.
有没有办法让JList扩展其单元格,以便显示JTextArea的整个内容?
我在GWT中有以下实体
@JsType(namespace = "my.entities")
public class MyEntity {
private Set<String> texts;
public Set<String> getTexts(){
if(this.texts==null)
this.texts=new LinkedHashSet<String>();
return this.texts;
}
public void setTexts(Set<String> texts){
this.texts=texts;
}
}
Run Code Online (Sandbox Code Playgroud)
当我myEntityVar.getTexts()
用Java语言调用时,返回的对象是HashSet。似乎jsinterop将HashSet的java实现转换为JavaScript。但是如何使用JavaScript创建新的HashSet myEntityVar.setTexts(texts)
呢?我为“文本”参数尝试了一个数组,但这不起作用。因此,我需要以某种方式在JavaScript中使用HashSet。但是,我不知道在哪里找到它。任何的想法?