我想添加JTable到JPanel其布局中null. JPanel包含其他组件.我必须添加JTable适当的位置.
使用JFreeChart渲染图表时,我注意到当图表的类别标签包含日文字符时出现布局问题.虽然文本使用正确的字形进行渲染,但文本位于错误的位置,可能是因为字体指标错误.
该图表最初配置为对该文本使用Source Sans Pro Regular字体,该字体仅支持拉丁字符集.显而易见的解决方案是捆绑实际的日文.TTF字体并要求JFreeChart使用它.这很好用,因为输出文本使用正确的字形,并且它也正确布局.
在使用除拉丁字符之外实际上不支持任何内容的源字体时,java.awt如何在第一个场景中正确呈现日文字符?如果重要的话,我正在使用JDK 1.7u45在OS X 10.9上进行测试.
有没有办法渲染日文字符而不捆绑单独的日文字体?(这是我的最终目标!)尽管捆绑解决方案有效,但如果可以避免,我不想在我的应用程序中添加6 Mb的膨胀.Java清楚地知道如何在没有字体的情况下以某种方式呈现日语字形(至少在我的本地环境中) - 它看起来只是被破坏的指标.我想知道这是否与下面的"frankenfont"问题有关.
在JRE执行内部转换之后,为什么Source Sans Pro字体告诉调用者(通过canDisplayUpTo())它可以显示日文字符,即使它不能?(见下文.)
这是一个服务器应用程序,我们呈现的文本将显示在客户端的浏览器和/或PDF导出中.图表始终光栅化为服务器上的PNG.
我无法控制服务器操作系统或环境,并且使用Java标准平台字体一样好,许多平台的字体选择都很差,在我的用例中是不可接受的,所以我需要捆绑自己的(在至少对于拉丁字体).可以使用日语文本的平台字体.
可能会要求应用程序显示日语和拉丁文本的混合,而不会有文本类型的先验知识.如果字符串包含混合语言,只要字形正确呈现,我就会使用什么字体变得矛盾.
我知道java.awt.Font #TextLayout是聪明的,并且在尝试布局文本时,它首先询问底层字体是否可以实际呈现所提供的字符.如果没有,它可能会以不同的字体交换,知道如何呈现这些字符,但这不会发生在这里,基于我对JRE类的调试.TextLayout#singleFont始终返回字体的非空值,它继续通过fastInit()构造函数的一部分.
一个非常好奇的注意的是,源三世Pro字体莫名其妙地被裹挟进告诉它调用者不知道如何呈现日文字符的JRE执行上的字体转换之后.
例如:
// We load our font here (download from the first link above in the question)
File fontFile = new File("/tmp/source-sans-pro.regular.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream(fontFile));
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(font);
// Here is some Japanese text that we want to display
String str = "????";
// Should …Run Code Online (Sandbox Code Playgroud) 我有四个内部框架和3个按钮.当我按下最大化按钮时,最大化但是它与所有框架重叠.但我的观点是它应该显示最小化的框架.请找到下面的代码
package Project;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import javax.swing.plaf.basic.BasicInternalFrameUI;
public class Test {
public Test() throws HeadlessException, PropertyVetoException {
createAndShowGUI();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
new Test();
} catch (HeadlessException ex) {
//Logger.getLogger(MinPanel1.class.getName()).log(Level.SEVERE, null, ex);
} catch (PropertyVetoException ex) {
// Logger.getLogger(MinPanel1.class.getName()).log(Level.SEVERE, null, ex);
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个 JFrame,它根据您单击的 MenuItem 显示 JPanel。它可以工作,但是现在我需要在将 JPanel 添加到框架并显示它后调用一个方法(因为我在该面板内使用 JFreeChart 并且我必须chartPanel.repaint()在 JPanel 可见时调用):
this.getContentPane().add( myjpanel, BorderLayout.CENTER ); //this = JFrame
this.validate();
myjpanel.methodCalledOnceDisplayed();
Run Code Online (Sandbox Code Playgroud)
看起来没问题吗?真的myjpanel被展示了吗?好像不是:
public void methodCalledOnceDisplayed() {
chartPanel.repaint()
}
Run Code Online (Sandbox Code Playgroud)
这不起作用(chartPanel.getChartRenderingInfo().getPlotInfo().getSubplotInfo(0)正在抛出 IndexOutOfBoundsException)。这意味着调用重绘时 JPanel 不可见,我测试了以下内容:
public void methodCalledOnceDisplayed() {
JOptionPane.showMessageDialog(null,"You should see myjpanel now");
chartPanel.repaint()
}
Run Code Online (Sandbox Code Playgroud)
现在它起作用了,我myjpanel在警报后面看到了,正如预期的那样,重新绘制了 chartPanel 并且没有发生异常。
编辑:SSCCE(需要 jfreechart 和 jcommon:http ://www.jfree.org/jfreechart/download.html )
导入 java.awt.BorderLayout; 导入 java.awt.EventQueue; 导入 java.awt.Font; 导入 javax.swing.JButton; 导入 javax.swing.JFrame; 导入 javax.swing.JLabel; 导入 javax.swing.JOptionPane; 导入 javax.swing.JPanel; 导入 javax.swing.border.EmptyBorder; 导入 …
我想补充JFreeChart到JPanel,然后添加JPanel到JTabbedPane.我设法显示JFreeChart上JFrame,但我想添加JFreeChart为一个4片JTabbedPane.
代码显示图表:
public class Chart extends javax.swing.JPanel {
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JPanel jPanel1 = new JPanel();
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(60, "Marks", "Student 1");
dataset.setValue(40, "Marks", "Student 2");
dataset.setValue(90, "Marks", "Student 3");
dataset.setValue(50, "Marks", "Student 4");
dataset.setValue(70, "Marks", "Student 5");
dataset.setValue(30, "Marks", "Student 6");
JFreeChart chart = ChartFactory.createBarChart(
"Student Marks", "Student Name", "Marks", dataset,
PlotOrientation.VERTICAL, false, true, false);
CategoryPlot p = …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,它使用遍布文本和图标的自定义按钮.适用于Windows和Linux,但现在OSX用户抱怨.文本不会显示在Mac上,只是'...'.代码看起来很简单,但是当涉及到mac时我很无能为力.我怎样才能解决这个问题?
测试用例:
package example.swingx;
import example.utils.ResourceLoader;
import com.xduke.xlayouts.XTableLayout;
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import java.awt.*;
import java.awt.event.ActionEvent;
public class SmallButton extends JButton {
private static ComponentUI ui = new SmallButtonUI();
public SmallButton() {
super();
/* final RepaintManager repaintManager = RepaintManager.currentManager(this);
repaintManager.setDoubleBufferingEnabled(false);
setDebugGraphicsOptions(DebugGraphics.FLASH_OPTION);*/
}
public SmallButton(AbstractAction action) {
super(action);
}
public SmallButton(String text) {
super(text);
}
public SmallButton(Icon icon) {
super(icon);
}
public void updateUI() {
setUI(ui);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Java Swing将文本区域放到对话框中.我有一个设置此JTextArea的大小的问题.文本区域的宽度始终等于窗口的整个宽度,如果我调整窗口大小,则会延伸到窗口.
private void arrangeComponents() {
JTextArea textArea = new JTextArea();
JPanel outerPanel = new JPanel();
outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.PAGE_AXIS));
JScrollPane scrollPane = new JScrollPane(textArea);
outerPanel.add(scrollPane, BorderLayout.CENTER);
Container contentPane = getContentPane();
contentPane.add(outerPanel, BorderLayout.CENTER);
}
Run Code Online (Sandbox Code Playgroud)
我希望JTextArea水平对齐到窗口的中心,并且不会改变它的大小.
我做错了什么?
java ×7
swing ×4
jfreechart ×3
layout ×2
awt ×1
chartpanel ×1
charts ×1
concurrency ×1
fontmetrics ×1
fonts ×1
jbutton ×1
jdesktoppane ×1
jtabbedpane ×1
jtable ×1
jtextarea ×1
macos ×1