- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的项目中使用 JAXB 进行 XML 出价,我还是一个初学者。现在我尝试将此 XML 文件绑定(bind)到类 FontStyle
Xml 文件如下所示
example.xml
<fontStyle>
<font>
<family>Arial</family>
<style>0</style>
<size>12</size>
</font>
<fontColor>
<red>0</red>
<green>0</green>
<blue>0</blue>
</fontColor>
<backgroundColor>
<red>255</red>
<green>255</green>
<blue>255</blue>
</backgroundColor>
</fontStyle>
这是我的 FontStyle 类:
FontStyle.java
import java.awt.Color;
import java.awt.Font;
public class FontStyle {
private Font font;
private Color fontColor = Color.BLACK;
private Color backgroundColor = Color.WHITE;
public FontStyle() {
}
public FontStyle(Font font, Color fontColor, Color backgroundColor) {
this.font = font;
this.fontColor = fontColor;
this.backgroundColor = backgroundColor;
}
public Font getFont() {
return font;
}
public void setFont(Font font) {
this.font = font;
}
public Color getFontColor() {
return fontColor;
}
public void setFontColor(Color fontColor) {
this.fontColor = fontColor;
}
public Color getBackgroundColor() {
return backgroundColor;
}
public void setBackgroundColor(Color backgroundColor) {
this.backgroundColor = backgroundColor;
}
}
我希望任何人都可以给我建议如何处理这个问题。
干杯
最佳答案
不能自然映射到 XML 表示的类型需要编写 XmlAdapter
实现中,Font
和 Color
就是这样的类型。下面的代码展示了如何根据您的情况编写适配器的示例。
我将适配器类作为嵌套类放置在 FontStyle
类中,但如果您愿意,您可以将它们创建为外部类。
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.awt.*;
@XmlRootElement
@XmlType(propOrder = {"font", "fontColor", "backgroundColor"}) // to keep ordering consistent with "example.xml"
public class FontStyle {
private Font font;
private Color fontColor = Color.BLACK;
private Color backgroundColor = Color.WHITE;
public FontStyle() {
}
public FontStyle(Font font, Color fontColor, Color backgroundColor) {
this.font = font;
this.fontColor = fontColor;
this.backgroundColor = backgroundColor;
}
@XmlJavaTypeAdapter(FontAdapter.class)
public Font getFont() {
return font;
}
@XmlJavaTypeAdapter(ColorAdapter.class)
public Color getFontColor() {
return fontColor;
}
@XmlJavaTypeAdapter(ColorAdapter.class)
public Color getBackgroundColor() {
return backgroundColor;
}
public void setFont(Font font) {
this.font = font;
}
public void setFontColor(Color fontColor) {
this.fontColor = fontColor;
}
public void setBackgroundColor(Color backgroundColor) {
this.backgroundColor = backgroundColor;
}
private static class ColorAdapter extends XmlAdapter<ColorAdapter.ColorValueType, Color> {
@Override
public Color unmarshal(ColorValueType v) throws Exception {
return new Color(v.red, v.green, v.blue);
}
@Override
public ColorValueType marshal(Color v) throws Exception {
return new ColorValueType(v.getRed(), v.getRed(), v.getBlue());
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class ColorValueType {
private int red;
private int green;
private int blue;
public ColorValueType() {
}
public ColorValueType(int red, int green, int blue) {
this.red = red;
this.green = green;
this.blue = blue;
}
}
}
private static class FontAdapter extends XmlAdapter<FontAdapter.FontValueType, Font> {
@Override
public Font unmarshal(FontValueType v) throws Exception {
return new Font(v.family, v.style, v.size);
}
@Override
public FontValueType marshal(Font v) throws Exception {
return new FontValueType(v.getFamily(), v.getStyle(), v.getSize());
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class FontValueType {
private String family;
private int style;
private int size;
public FontValueType() {
}
public FontValueType(String family, int style, int size) {
this.family = family;
this.style = style;
this.size = size;
}
}
}
}
解码 example.xml 并测试结果的代码如下所示:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.File;
public class App {
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(FontStyle.class);
// unmarshall "example.xml"
File exampleFile = new File("example.xml");
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
FontStyle fontStyle = (FontStyle) jaxbUnmarshaller.unmarshal(exampleFile);
// marshall back to XML and print the result
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); // removes xml declaration line for consistency with "example.xml" file
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(fontStyle, System.out);
}
}
关于java - Jaxb Xml 到 java.awt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33055349/
AWT-EventQueue 线程和 AWT-Shutdown 线程没有在我们的应用程序中关闭。有没有一种调试技术可以找出它们不存在的原因?有什么特别的东西要寻找吗? 最佳答案 如果你的意思是关闭所有
java.awt.* 和 java.awt.event.* 有什么区别? 最佳答案 这只是两个不同的包。 当您说import java.awt.*时,它仅导入那些完全属于java.awt包的类,而不是
我正在将 aadhar 集成到 liferay 中。我尝试了这个链接 https://developer.uidai.gov.in/site/book/export/html/18 所以我想将其集成到
我想知道如何确定 Java.awt.Rectangle 是否包含特定 Java.awt.Color 的像素。我一直在到处寻找,但找不到任何关于此的信息,甚至找不到任何可能的信息。 所以我想知道如何确定
我试图在组件和图像之间切换面板的内容,它适用于组件: imgpanel.removeAll(); Component comp; if ((comp = player.getVisualCompone
我在使用 JAVA 编码时遇到一些错误,我一直在尝试解决这个问题,也试图找到其他有同样问题的人并修复它,但没有任何效果... 嗯..这是代码 package ca.vanzeben.game;
我想我可以尝试一下 JAXB 来处理存储和恢复设置。但即使是“最简单”的例子我也遇到了麻烦: import java.awt.Point; public class Config { public
这个问题已经有答案了: Import package.* vs import package.SpecificType [duplicate] (10 个回答) 已关闭 7 年前。 在我现在正在进行的
private static byte[] get_byte_data(BufferedImage image) { //WritableRaster raster = image.get
是否有可能获得标准 AWT Cursor以位图图像的形式(例如 BufferedImage )或任何可在 Graphics2D 上绘制的图像?例如,文本光标 new Cursor(Cursor.TEX
我的代码中有三个点,我想填充它们之间的区域,或者换句话说,在 3 个点之间绘制并填充一个三角形。 我想过简单地用 for 循环绘制线条(从 x1 到 x2),但我认为这不会有效,是否有其他更有效的方法
我正在制作一个小脚本,我使用鼠标键来节省我的工作时间。我可以正确、良好地使用鼠标键。但是,当使用 java.awt.Robot 和 java.awt.event.KeyEvent 时,鼠标键基本上被忽
我正在尝试在 scala 中使用 java awt 来制作一个简单的桌面应用程序。我已经在它上面工作了几天,没有任何问题,直到我有 2 天没有碰它,当我回来时,我得到一个 java.lang.NoCl
我在 VisualVM 和线程 View 中监视一个 JavaFX 程序,不断有 AWT-EventQueue-0 和 AWT-Shutdown 线程被创建和销毁。这是正常行为吗?这是什么原因? 最佳
我需要将 java.awt.geom.Area 或 java.awt.Shape 转换为 java.awt.Polygon。我所知道的是:isSingular = true、isPolygonal =
我正在重新使用 Java 并审查我的一些旧代码,并且我看到了很多我已经完成的地方 import javax.swing.*; import java.awt.*; 或者实际上从 swing/awt 包
晚上, 我在玩一个小的 swing 应用程序,我添加了一个按钮来响应按下。因此我需要实现 ActionListener。我已经添加了这一行: import java.awt.*; 但它告诉我找不到“A
我有这个 java 代码: Editor() { javax.swing.SwingUtilities.invokeLater(new Runnable() { pub
请帮我解决这个问题 sun.awt.image.ToolkitImage 无法转换为 java.awt.image.BufferedImage if (shape.hasImage())
嗨 Stackoverflow 的 friend 们 我最近将 Jenkins 服务器配置到 Apache Tomcat 7.0.42我制作的程序是将 jenkins.war 文件部署到 tomcat
我是一名优秀的程序员,十分优秀!