- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Java 应用程序中,我有一个 JTabbedPane 和一个合成器外观。 l&f 由 xml 文件定义。这对我来说非常有效。
现在的挑战是:我希望 JTabbedPane 选项卡中的文本垂直书写,而不是水平书写。为此,我对 SynthGraphicsUtils 进行了子类化,并重写了 PaintText(SynthContext ss, Graphics g, String text, int x, int y, int mnemonicIndex) 方法。这也有效。
现在的问题是:不同选项卡中的文本是垂直显示的,但每个选项卡的大小似乎计算错误。选项卡未正确分隔。不幸的是,我不允许发布图像...选项卡相互重叠。
我不知道如何解决这个问题:-(这是我的代码:
SwingTest.java
public SwingTest(JFrame owner) {
super(null);
setOpaque(true);
setSize(WIDTH, HEIGHT);
owner.setSize(WIDTH, HEIGHT);
JTabbedPane pane = new JTabbedPane(JTabbedPane.LEFT);
pane.setName("MyPane");
pane.setSize(WIDTH, HEIGHT);
// Add a tab
JPanel p1 = new JPanel();
p1.setSize(300, 300);
JPanel p2 = new JPanel();
p2.setSize(500, 500);
JPanel p3 = new JPanel();
p3.setSize(300, 300);
p3.add(new JLabel("HALLO"));
JPanel p4 = new JPanel();
p4.setSize(300, 300);
JButton roundedButton = new JButton("Halloi Button");
roundedButton.setName("roundedButton");
p2.add(roundedButton);
pane.addTab(EFFORT_CARD, p1);
pane.addTab(EMOTION_CARD, p2);
pane.addTab(COMFORT_CARD, p3);
pane.addTab(DRIVING_CARD, p4);
add(pane);
pane.updateUI();
laf.xml
<!--
TABNAVIGATION
-->
<style id="tabNavigationStyle">
<!-- Angabe ist wichtig, da die Hintergrundfarben sonst nicht angezeigt
werden. -->
<!-- <object id="verticalTextWriterClass" class="VerticalTextWriter" />
<painter method="text" idref="verticalTextWriterClass"/> -->
<opaque value="TRUE" />
<state>
<font name="Verdana" size="12" />
<color value="WHITE" type="BACKGROUND" />
<color value="BLACK" type="FOREGROUND" />
<color value="BLUE" type="TEXT_FOREGROUND" />
<object id="myGraphicsUtils" class="MySynthGraphicsUtils" />
<graphicsUtils idref="myGraphicsUtils" />
</state>
<!-- Fuer den Zustand "SELECTED" einen anderen Style definieren. -->
<state value="SELECTED">
<!-- Auf weiter oben definierte Farbe beziehen. -->
<color value="WHITE" type="BACKGROUND" />
<color idref="magentaForegroundColor" type="TEXT_FOREGROUND" />
</state>
<state value="FOCUSED">
<!-- Auf weiter oben definierte Farbe beziehen. -->
<color value="WHITE" type="BACKGROUND" />
<color idref="magentaForegroundColor" type="TEXT_FOREGROUND" />
</state>
<state value="PRESSED">
<!-- Auf weiter oben definierte Farbe beziehen. -->
<color value="WHITE" type="BACKGROUND" />
<color idref="magentaForegroundColor" type="TEXT_FOREGROUND" />
</state>
</style>
<!-- Den Style fuer die Tabnavigation an die Tabnavigation mit dem Namen (type="name")
"MyPane" binden. Der Name wird in Java ueber component.setName() festgelegt. -->
<bind style="tabNavigationStyle" type="region" key="TabbedPaneTab" />
MySynthGraphicsUtils.java
public class MySynthGraphicsUtils extends SynthGraphicsUtils {
public void paintText(SynthContext ss, Graphics g, String text, int x, int y, int mnemonicIndex) {
Graphics2D g2 = (Graphics2D) g;
System.out.println(ss.getComponent().getClass().getName());
Object oldAAValue = g2.getRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
g2.setFont(ss.getStyle().getFont(ss));
AffineTransform tx = new AffineTransform();
tx.rotate(90 * Math.PI / 180, x, y);
g2.setTransform(tx);
g2.drawString(text, x, y);
// get metrics from the graphics
FontMetrics metrics = g2.getFontMetrics(ss.getStyle().getFont(ss));
// get the height of a line of text in this font and render context
int hgt = metrics.getHeight();
// get the advance of my text in this font and render context
int adv = metrics.stringWidth(text);
// calculate the size of a box to hold the text with some padding.
Dimension size = new Dimension(adv + 2, hgt + 2);
//g2.setClip(0, 0, size.width, size.height);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, oldAAValue);
}
}
非常感谢!!
最佳答案
作为解决方法,我使用左侧带有 sourceInset 的图像边框来分隔选项卡。我使图像的颜色与应用程序的背景颜色相同:
<state>
<opaque value="true"/>
<color value="black" type="BACKGROUND" />
<color value="white" type="TEXT_FOREGROUND" />
<imagePainter method="tabbedPaneTabBorder" path="relative/path/to/white_border.png"
sourceInsets="0 1 0 0" paintCenter="false"/>
<insets top="3" bottom="3" right="3" left="3"/>
</state>
关于Java 合成器 : Problem with JTabbedPane and SynthGraphicsUtils,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3798561/
我必须构建合成器,并且我正在使用 C 来对我的 ATmega128A 进行编程。我需要记录按下的键盘并在一段时间后播放它们。对于键盘按下,我在 main.c 中使用轮询。为了弹奏键盘,我使用 Time
我正在寻找可以与我的 .NET 应用程序集成的合成器。那里有可用的 .NET 合成器吗?有没有办法将 VST 插件集成到您的 .NET 应用程序中? 我想创建基于 MIDI 输入的声音,最好是比正弦波
我似乎无法改变乐器。我切换了仪器的值,但输出没有任何不同。无论我尝试什么值(value),我都只能得到一个钢琴乐器来演奏。这是下面的简单代码。有没有人有什么建议?还是我缺少仪器对象的基础知识? imp
我想网络上并没有“wayland 服务器编程初学者指南”,而 weston 的源代码看起来令人望而生畏。 是否有一个准系统 Wayland 服务器可以让我了解从哪里开始?我可以在 X 下运行我可以确认
我一直在研究人们的 Java 合成器,但不知道如何生成他们程序的简单版本。我的目标是用 java 创建一个简单的测试音,用户可以通过按某些键来更改它。例如,按“r”将提高幅度,或“f”将增加频率。我只
在我的 Java 应用程序中,我有一个 JTabbedPane 和一个合成器外观。 l&f 由 xml 文件定义。这对我来说非常有效。 现在的挑战是:我希望 JTabbedPane 选项卡中的文本垂直
我想开发一个非常简单的程序来将 PC 键盘映射到钢琴键盘:每次用户按下一个键时,都会生成一个 MIDI 事件,并且一个独立的采样器/合成器(例如 SFZ+ 或其他)接收这些事件并播放声音。 我能够生成
我在 codebuild 上运行 cdk synth 时遇到问题,它只是说:You are not authorized to perform this operation. 这是一个 CDK 应用程
我的 JTextField 无法获得白色背景,我做错了什么?(我知道图像没有画在中心以显示文本,但我将背景设置为白色;没有效果) -- XML --
我想用 Java 实现一个 Midi 合成器。(合成器 = 代表一个或多个乐器的新设备) 我实现的是javax.sound.midi.Receiver: package at.bachmann.se.
我正在检查今天的 Moog Synth Google 涂鸦,献给 Robert Moog, 当我遇到以下一段 html 代码时: (您可以查看源代码并为 执行 Ctrl+F,您将在第一
我已经在 Introjucer 中为简单的 vst 合成器生成了源文件和项目文件。代码编译时出现一个奇怪的错误:错误 C2259:“SimpleSynthAudioProcessor”:无法实例化抽象
在过去的几周里,我一直在从事一个对我来说非常新的项目,并且我正在边做边学。我正在使用 Raspberry Pi 2 构建一个合成器,并使用 Python3 对其进行编码,因为我对该语言有一些基本知识,
我有一个 Javascript 应用程序可以创建一些音频并播放它们。音调生成为 WAV 文件,然后像这样注入(inject).... document.getElementById("play
我是一名优秀的程序员,十分优秀!