- 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/
我编写了一个小程序,用于创建带有选项卡式 Pane 的简单 GUI。目前它有两个选项卡。在一个选项卡中我创建了一个按钮,在另一个选项卡中我创建了两个按钮(基于第三类中的字符串)。我无法做的是在第二个选
我想在单击负责使用 Action Listener 计算的按钮后将选定的 JTabbedPane“计算”更改为 TabbedPane“结果”。 最佳答案 class ButtonHandler imp
收到此错误: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Project.reportpane.a
我遇到的问题是,在 JTabbedPane 内部时,内部面板的背景颜色未设置(或未显示) 我有以下结构: JPanel BorderLayout: JTabbedPane (BorderLayo
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
在我的 JTabbedPane 中,我以两种不同的方式删除标签: tabbedPane.remove(index) 和 tabbedPane.removeAll() 两者在关闭选项卡方面都可以正常工作
我有一个使用 JTabbedPane 来显示多个不同选项卡的应用程序。这些选项卡之一有一个正在运行的线程来显示其内容。我已经实现了一个 ComponentListener 来在选项卡不可见时停止线程。
我想让我的选项卡标签共享 JTabbedPane 宽度。如果有一个标签,适合整个宽度,如果两个标签共享宽度,如果三个,每个 1/3,依此类推... 我什至不知道是否可以在不将组件放在那里并调整其大小的
我想知道如何从左侧开始设置 JTabbedPane 的选项卡位置。默认情况下,它们处于中间位置,因为我使用的是 Mac OS X。 如果您需要更多信息,请告诉我。 查看此图像以了解我使用默认 JTab
在这个 JTabbedPane 截图中 我正在使用 Netbeans 的 DnD,我一直在修改它只是为了在选项卡之间放置空格。到现在我还是得不到我想要的。 有办法吗? 最佳答案 我不确定其他方法,但我
我对java相当陌生,正在创建一个windowbuilder程序。我想知道在使用 Jtabbedpane 并在程序窗口中的选项卡之间切换时是否可以使用 Action 监听器从单独的类获取内容。例如,我
给定一个 contentPane 布局设置为 null 的 JFrame,我想添加两个选项卡,一个用于发布者,另一个用于订阅者,例如: public class PubSubGUI extends J
在 JTabbedPane 中,选项卡的顺序是从下到上: 我希望它是从上到下的,这意味着 tab0 位于顶行,tab60 位于底行。 代码: import javax.swing.JFrame; im
这类似于问题How to build a Google-chrome tabs and menubar interface in Java Swing? (我想完成同样的任务),但更重要的是:如何将组
我想将 JTabbedPane 放在中间,单击我想要更改的任何选项卡将反射(reflect)在选项卡 Pane 的上方和下方面板中。 我尝试过,但它只适用于下面的面板。 如何克服这个问题?请帮助我。
我创建了一个 Java 选项卡式 Pane 。在选项卡式 Pane 中,我创建了一个名为“视频”的选项卡。我希望每当我单击视频选项卡时,视频都会自动在选项卡面板本身上播放。我可以这样做吗?如果是,请告
我有一个很长的数据列表要在 jtabbedpanel 上显示,向下滚动数据时,顶部的选项卡式面板名称将不可见。我怎样才能使选项卡式面板选项卡在顶部可见,甚至在向下滚动? 任何人都可以帮助我解决这个问题
我进行了快速研究来解决这个问题,但到目前为止我没有发现任何与此相关的信息。我将一张图像放入一个 TabbedPane 对象中,但是当我尝试将此图像与 TabbedPane 内的标签中心对齐时,它“不起
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
我是一名优秀的程序员,十分优秀!