- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我问this question关于我使用Nimbus外观的单元渲染器遇到的问题,事实证明该问题可能与Scala有关。基本上,我有一个扩展了Panel
的单元格渲染器(而不是DefaultTableCellRenderer
),并且行为奇怪:它不能正确渲染备用行的颜色,而等效的Java程序表现得很好。如果有人感兴趣,可以运行以下Scala代码:
import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
import java.awt.{Dimension, Color}
import java.lang.String
import javax.swing.table.{DefaultTableCellRenderer, AbstractTableModel, TableCellRenderer}
import javax.swing.{UIManager, JComponent, JLabel, JTable}
import swing.{Component, MainFrame, Label, BorderPanel, Panel, Table, ScrollPane, Frame, SimpleGUIApplication}
object SwingTest extends SimpleGUIApplication {
UIManager.setLookAndFeel(new NimbusLookAndFeel)
val tcr = new TCR
val dtcr = new DefaultTableCellRenderer
val t = new Table {
model = new AbstractTableModel {
def getColumnCount = 2
def getRowCount = 3
override def getColumnName(column: Int) = "Headings"
def getValueAt(rowIndex: Int, columnIndex: Int) = rowIndex match {
case 0 => "Hello"
case 1 => "World"
case 2 => "Again"
}
}
override protected def rendererComponent(isSelected: Boolean, hasFocus: Boolean, row: Int, column: Int) = {
if (column == 0)
Component.wrap(tcr.getTableCellRendererComponent(peer, model.getValueAt(row, column), isSelected, hasFocus, row, column).asInstanceOf[JComponent])
else
Component.wrap(dtcr.getTableCellRendererComponent(peer, model.getValueAt(row, column), isSelected, hasFocus, row, column).asInstanceOf[JComponent])
}
}
val top = new MainFrame {
title = "Test"
contents = new ScrollPane {
viewportView = t
}
size = new Dimension(300, 300)
}
class TCR extends BorderPanel with TableCellRenderer {
val label = new Label
label.foreground = Color.CYAN
add(label, BorderPanel.Position.Center)
def getTableCellRendererComponent(table: JTable, value: Any, isSelected: Boolean, hasFocus: Boolean, row: Int, column: Int) = {
label.text = String.valueOf(value)
if (isSelected)
background = table.getSelectionBackground
else {
println("row=%d, t_back=%s, t_alt=%s".format(row, table.getBackground, UIManager.getColor("Table.alternateRowColor")))
background = if (row % 2 == 0) UIManager.getColor("Table.alternateRowColor") else table.getBackground
}
peer
}
}
}
Panel
-renderer中的替代行着色不正确有关)。如果运行等效的Java,您将看到它正常运行。任何人都知道为什么Scala代码无法按预期工作?这是等效的Java代码:
import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;
public class SwingTest {
public static class StringCellRenderer extends JPanel implements TableCellRenderer {
private JLabel l1 = new JLabel();
public StringCellRenderer() {
setLayout(new BorderLayout());
l1.setForeground(Color.CYAN);
add(l1, BorderLayout.CENTER);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
l1.setText(String.valueOf(value));
if (isSelected) {
setBackground(table.getSelectionBackground());
}
else {
if ( row % 2 == 0 ) {
setBackground(UIManager.getColor("Table.alternateRowColor"));
} else {
setBackground(table.getBackground());
}
}
return this;
}
}
public static void main(String[] args) throws UnsupportedLookAndFeelException {
JTable t = new JTable(new AbstractTableModel() {
public int getRowCount() {
return 3;
}
public int getColumnCount() {
return 2;
}
public Object getValueAt(int rowIndex, int columnIndex) {
switch (rowIndex) {
case 0:
return "Hello";
case 1:
return "World";
case 2:
return "Again";
default:
throw new IllegalArgumentException();
}
}
@Override
public String getColumnName(int column) {
return "Headings";
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return String.class;
} else {
return Object.class;
}
}
});
t.setDefaultRenderer(String.class, new StringCellRenderer());
t.setDefaultRenderer(Object.class, new DefaultTableCellRenderer());
UIManager.setLookAndFeel(new NimbusLookAndFeel());
JFrame f = new JFrame("Test");
f.setContentPane(new JScrollPane(t));
f.setSize(300, 300);
f.pack();
f.setVisible(true);
}
}
最佳答案
我认为这可能是一个错误(感谢scala swing团队的Ingo Meier在scala用户邮件列表上的帮助)。它在scala追踪下归档为#2292
关于scala - 使用Nimbus和Scala的Table Cell渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1326763/
我是 Java Nimbus 外观和感觉 的新手。我正在尝试使用 Nimbus 的功能来自定义单个组件实例,使用 putClientProperty("Nimbus.Overrides", overr
我正在使用 java 7 update 17 和 netBeans IDE 7.3 我想将 nimbus 设置为每个 GUI 项目的默认值,但 Oracle 网站指令不起作用。 how to set
我正在制作一个程序,该程序应该尽可能独立于平台。我正在使用 Nimbus LAF。 我想知道,我应该担心字体吗?它的默认字体是包含在 LAF 本身中还是从平台获取? 最佳答案 这是默认的非系统字体。
如何自定义 Nimbus 外观中组件的图像?我想在 Photoshop 中创建图像并放置在一些 Nimbus 外观和感觉组件上,这些是我想要更改的组件: 滚动条按钮旋钮滚动条拇指滚动条滚动条轨道 谢谢
在 Nimbus 的网络照片应用程序示例中,当我返回表格(从 Facebook 或 Dribbble 中选择要下载照片的位置)时,我之前看到的和缓存中的照片都会从其中清除。有办法防止这种情况吗? 例如
我想更改选项卡标题的颜色。 我尝试设置不同的属性,但没有任何变化。 在我的 main 中,我将属性 text 设置为白色,因此所有文本都是白色的。 现在我想更改一些组件文本,例如选项卡 Pane ,但
我已经创建了一个文本字段组件,里面有一个“x”按钮,可以清除该字段的文本。它在使用 Window 的系统外观和感觉(对于 Windows)时效果很好,但是我在使用 Nimbus 时尝试获得正确的外观时
引用这个错误: 4848910 : UIManager only updates colors once 我的 JFrame 上有两个按钮。从第一个按钮开始,我将 LAF 颜色更改为 UIManage
所以,我的程序中有一个使用 Nimbus LAF 的 JTextArea。由于一些功能问题,我需要将其替换为 JTextPane。 但是,JTextArea 默认情况下有一个绘制的边框。 JTextP
我正在使用 NIPagingScrollView在 iPhone 上显示多个页面。 每次我翻到一个页面,下一页也被预先加载,这很好。 当我旋转 iPhone从纵向模式到横向模式,我让layoutSub
我正在使用 Nimbus显示带有擦洗器和可缩放 ImageView 的相册。我使用网络图像,并在加载最终图像之前显示缩略图。 NIPhotoAlbumScrollView提供方法didLoadPhot
我正在尝试覆盖 JLabel 的一些 nimbus 属性。 UIDefaults labelDefault = new UIDefaults(); labelDefault.put("Labe
刚接触java,有一个问题,无论我做什么似乎都无法解决,所以任何我们将非常感谢您的帮助。 我有一个Java小应用程序,并集成了一个弹出日历(WWW)使用 Nimbus 外观和感觉的可用。我的问题是我无
我正在尝试全局更改工具提示的大小。 我正在使用: UIManager.put("ToolTip.font", new Font("SansSerif",Font.PLAIN,25)); 总体来说效果很
我们正在使用 Nimbus LaF 开发一个 Swing 应用程序。我们更改了许多 Nimbus 默认设置(控件、文本、NimbusLightBackground 等)以拥有深色主题。 现在我们在渲染
我想验证表格单元格中的用户输入,并且我使用了 Nimbus 外观。这是验证整数输入的单元格编辑器的代码:WholeNumberField它扩展了 JTextField 并添加了输入验证。 当我为列设置
我想知道为什么 Nimbus会以某种方式与 Virtual keys 发生冲突.查看我在下面制作的示例: public class buttontest implements ActionLi
只是寻找一些文档。 最佳答案 Nimbus 基于 Synth,因此您应该从 Synth 的角度考虑对其进行自定义,这一点已有详细记录。 关于java - 有人有关于 Nimbus 外观和感觉定制的信息
我想更改选项卡选项卡的高度,为此我尝试了多种方法,但没有成功。首先,我尝试使用间隔图标,高度很好,但选项卡的文本不再居中。然后我尝试更改 Nimbus L&F 属性,TabbedPane.tabIns
我有例如 UIDefaults defaults = UIManager.getLookAndFeelDefaults(); defaults.put("text",Color.GREEN);` 文本
我是一名优秀的程序员,十分优秀!