相关疑难解决方法(0)

如何在JPanel中添加带有null布局的JTable?

我想添加JTableJPanel其布局中null. JPanel包含其他组件.我必须添加JTable适当的位置.

java layout jtable layout-manager null-layout-manager

232
推荐指数
6
解决办法
4万
查看次数

为什么只有拉丁字符的Java字体声称支持亚洲字符,即使它不支持?

使用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)

java fonts awt jfreechart fontmetrics

7
推荐指数
1
解决办法
1270
查看次数

如何将最小化的jinternalframe保持在最顶层

我有四个内部框架和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)

java layout swing jinternalframe jdesktoppane

5
推荐指数
1
解决办法
3032
查看次数

JPanel 添加但未“及时”显示

我有一个 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;
导入 …

java concurrency swing jfreechart event-dispatch-thread

4
推荐指数
1
解决办法
3136
查看次数

使用JPanel将ChartPanel添加到JTabbedPane

我想补充JFreeChartJPanel,然后添加JPanelJTabbedPane.我设法显示JFreeChartJFrame,但我想添加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)

java charts jfreechart jtabbedpane chartpanel

3
推荐指数
1
解决办法
6299
查看次数

自定义按钮不能在mac上工作(ButtonUI)

我有一个应用程序,它使用遍布文本和图标的自定义按钮.适用于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 macos swing look-and-feel jbutton

2
推荐指数
1
解决办法
3606
查看次数

如何调整Java Swing JTextArea的大小

我正在尝试使用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 swing jtextarea layout-manager preferredsize

0
推荐指数
1
解决办法
3万
查看次数