小编ryv*_*age的帖子

jfreechart setbackgroundpaint没有做任何事情

对于有使用jFreeChart for Swing应用程序经验的人:

我无法更改图表的背景.我的最终目标是为我的图表设置平滑的渐变背景,但我无法改变任何背景.这行代码chart.setBackgroundPaint(Color.BLUE);应该做点什么,对吗?但它没有改变任何东西.我得到的是相同的灰色情节背景和白色图表背景.

销售图表

我正在摸不着为什么我不能让颜色改变......任何帮助都非常感谢!

这是我的代码(如果你有jfreechart库,可编译和可运行)

    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GradientPaint;
    import java.awt.Paint;
    import java.awt.PaintContext;
    import java.awt.Rectangle;
    import java.awt.RenderingHints;
    import static java.awt.Transparency.OPAQUE;
    import java.awt.geom.AffineTransform;
    import java.awt.geom.Ellipse2D;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.ColorModel;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.renderer.category.LineAndShapeRenderer;
    import org.jfree.chart.title.TextTitle;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;

    /**
     *
     * @author Ryan
     */
    public class SalesGraph extends JPanel {

        /**
         * Creates a sample …
Run Code Online (Sandbox Code Playgroud)

java swing jfreechart

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

你如何缩小内容以适应div?

我正在进行一个项目,我被分配了修改报告页面以使其可打印的任务.该报告使用PHP在div中生成表格,但div在打印时有时大于1页长度.因此,最终发生的事情是,一旦页面长度耗尽,表/ div就会被破坏.最终的结果是混乱.

我用标签修改了print.css:

.general_report {
    page-break-after: always;
}
Run Code Online (Sandbox Code Playgroud)

所有的div看起来像:

<div class="general_report">
Run Code Online (Sandbox Code Playgroud)

这会稍微清理一下报告(即每个部分都以新页面开头).但这似乎浪费了相当多的论文,并没有解决中间页面破坏的问题.我的另一个想法是自动缩小div的内容以准确地适合1页.我们的div都没有超过2页,所以如果可行,我认为这将是一个很好的解决方案......但这可能吗?有没有办法让CSS调整字体大小以适应div长度?

我用谷歌搜索缩放内容以适应div,但每个人似乎都想要与我想要的相反(即div适合内容,而不适合div).

有没有人可以提供任何帮助?打印html表的一般例子也很有效,因为我能找到的所有结果都涉及非浏览器支持的CSS(即,不起作用):"page-break-inside:avoid".

先感谢您.

html css printing-web-page page-break-inside

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

SwingWorker中的错误处理

我的问题是基于理论的问题,但它确实满足了我的特定需求.

当你的SwingWorker抛出a)你可以预料到并且b)需要从中恢复并继续的异常时,你会怎么做,但是你想通知用户这个错误已经发生了?如何获取预期的异常并通知用户而不违反"No Swing code from doInBackground()"规则?

考虑到这个问题,我已经开发了一个SSCCE,我想提出下面的问题.

SSCCE:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.ExecutionException;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;

public class Test {

    public static void main(String args[]) {
        final JFrame frame = new JFrame();
        JButton go = new JButton("Go.");
        go.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new Task(frame);
            }
        });
        frame.add(go);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    static class Task extends SwingWorker<Void, Void> {
        JFrame …
Run Code Online (Sandbox Code Playgroud)

java swing swingworker event-dispatch-thread invokeandwait

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

ResultSet::getBigDecimal 抛出 joda-money 的比例异常

尝试从 MySQL 数据库读取的 BigDecimal 创建 Joda-MoneyMoney对象会引发错误。

这段代码:

PreparedStatement p_stmt = ...;
ResultSet results = ...;
Money amount = Money.of(CurrencyUnit.USD, results.getBigDecimal("amount"));
Run Code Online (Sandbox Code Playgroud)

抛出这个:

java.lang.ArithmeticException: Scale of amount 1.0000 is greater than the scale of the currency USD
    at org.joda.money.Money.of(Money.java:74)
    at core.DB.getMoney(DB.java:4821)
Run Code Online (Sandbox Code Playgroud)

我实际上已经通过添加舍入解决了该错误:

Money amount = Money.of(CurrencyUnit.USD, results.getBigDecimal("amount"), RoundingMode.HALF_UP);
Run Code Online (Sandbox Code Playgroud)

但是,我对这个解决方案持怀疑态度。是最好的吗?

我用来按照这个 SO 答案DECIMAL(19,4)将货币值存储在数据库上。老实说,这有点让我困惑,为什么那里的回答者要求数据库上的小数点后 4 位精度,但我倾向于相信高价值的答案,并且我认为他们知道他们在说什么,并且我会后悔没有遵循他们的要求建议。然而 Joda-Money 不喜欢美国货币的小数点后 4 位精度。也许是国际标准要求小数点后 4 位精度?没有把握..DECIMAL(19,4)

为了使问题简洁:

  1. RoundingMode.HALF_UP解决此错误的理想解决方案吗?
  2. 我应该将 MySQL DB 的精度从 更改为DECIMAL(19,4)DECIMAL(19,2)
  3. 有没有办法改变 Joda-Money …

java mysql jdbc joda-money

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

奇怪的Set.contains()行为

我最初是为了测试我想在这里提出的基于理论的最佳实践问题,但是在这个过程中我在java.Set类中发现了一些有趣的行为.最初,我想知道这种方法的任何潜在缺陷,但现在我可以看到它根本不起作用,我想知道为什么.

我有一些对象是我的应用程序的数据库对象的容器.对象都具有唯一integer id的,并且hashCode()equals()由所述整数ID(在hashsets用于存储)中定义.

好吧,我希望能够检查一个hashset是否包含只给出id的对象.当然,我可以创建一个新的对象实例并检查这种方式.但是,只是为了踢,我想看看我是否能够完成它.当然,这对于hashmap来说也是微不足道的,所以这不是一个重要的问题,只是为了娱乐和知识.

所以,我创建了一个类,并尝试调用contains()一个integer,而不是该对象的实例.当然,Netbeans为此提供了有趣的警告

Suspicious call to java.util.Collection.contains:
Given object cannot contain instances of int (expected Person)
Run Code Online (Sandbox Code Playgroud)

忽略错误并运行代码,我惊讶地发现Java甚至没有调用equals方法.我把调试System.out.println()s放在我的equals方法中进行验证,是的,它甚至没有被调用.

在下面发布的代码中,预期的输出应该是(如果我的理论是正确的):

Here
Yes
Here
Yes
Run Code Online (Sandbox Code Playgroud)

或(如果我的理论不正确):

Here
Yes
Here
No
Run Code Online (Sandbox Code Playgroud)

但是,输出是:

Here
Yes
No
Run Code Online (Sandbox Code Playgroud)

注意,在"No"之前没有"Here"证明equals方法甚至没有被调用.

谁能摆脱光明?我总是被要求添加这个以equals()提高效率:

if (!(obj instanceof Person))
    return false;
Run Code Online (Sandbox Code Playgroud)

但如果equals()在这种情况下甚至没有被召唤,那那将毫无意义.

这是SSCCE:

谢谢你的时间.

    import java.util.LinkedHashSet;
    import java.util.Set;

    /**
     *
     * @author Ryan
     */ …
Run Code Online (Sandbox Code Playgroud)

java contains hashset

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

无法实例化QueryTranslatorFactory:org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory

(前言:这不是" org.hibernate.HibernateException:无法实例化QueryTranslatorFactory:org.hibernate.hql.classic.ClassicQueryTransactionFactory " 的副本,因为答案包括在包中添加内部功能).

我正在关注Netbeans教程"在Java Swing应用程序中使用Hibernate"

我正在创建从数据库创建Hibernate映射文件和POJO的行

当我使用"Hibernate Mapping Files和POJO from Database"向导时,我得到以下对话框:

在此输入图像描述

因为红色的消息被切断了,我在这里复制/粘贴它:

Hibernate configuration fails with message:
could not instantiate QueryTranslatorFactory: org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory
see message.log for exception details.
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 有谁知道可能导致这种情况的原因?我仔细检查了我的依赖项和我的.xml文件.显然,我是Hibernate的新手,所以我不知道还有什么可以尝试.
  2. 它说检查"message.log".这可能位于哪里?这是否有默认位置?

更新:

java swing netbeans hibernate

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

扩展抽象泛型类的麻烦

我需要创建一个JTextField只强制某些类型的输入(我的目标是某些功能排除使用JFormattedTextField).为了实现这一点,我想创建一个abstract JTextField带泛型的类:

abstract class VTextField_Core<E> extends JTextField {
    public abstract E getAmount();
    public abstract <E> void setAmount(E amount);
}
Run Code Online (Sandbox Code Playgroud)

并以这样的方式实现它:

class VTextField_Integer<Integer> extends VTextField_Core {

    @Override
    public void setAmount(Integer amount) {
        // format Integer to text
    }

    @Override
    public Integer getAmount() {
        // parse text and return Integer
    }
}

class VTextField_Double<Double> extends VTextField_Core {

    @Override
    public void setAmount(Double amount) {
        // format Double to text
    }

    @Override
    public Double getAmount() {
        // parse …
Run Code Online (Sandbox Code Playgroud)

java generics

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

将classname传递给方法

我的程序倾向于使用大量的包装异常(SwingWorker例如,包装所有异常ExecutionException).所以,我正在尝试编写一个方法,允许我检查异常或其任何原因是否instanceof是异常类型,但我不知道如何(如果可能的话)传递JUST类名作为方法的参数.

到目前为止,我有这个:

public static boolean errorOrCausesInstanceOfClass(Throwable e, Class c) {
    return e != null && (e.getClass().equals(c) || (e.getCause() != null && errorOrCausesInstanceOfClass(e.getCause(), c)));
}
Run Code Online (Sandbox Code Playgroud)

但这只有在e.getClass()完全相同的情况下才有效c.getClass().但是我想检查使用instanceof以捕获子类.

有没有办法实现这个目标?

java instanceof

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

在Java 8流中避免NoSuchElementException

这个问题是早期问题的后续问题:使用Streams添加BigDecimals

问题与BigDecimal使用Java 8 Stream和Lambda表达式添加s 有关.在实现给出的答案后,我遇到了另一个问题:每当流为空时,该Optional::get()方法抛出一个NoSuchElementException.

请考虑以下代码:

public static void main(String[] args){
    LinkedList<BigDecimal> values = new LinkedList<>();
//        values.add(BigDecimal.valueOf(.1));
//        values.add(BigDecimal.valueOf(1.1));
//        values.add(BigDecimal.valueOf(2.1));
//        values.add(BigDecimal.valueOf(.1));

    // Classical Java approach
    BigDecimal sum = BigDecimal.ZERO;
    for(BigDecimal value : values) {
        System.out.println(value);
        sum = sum.add(value);
    }
    System.out.println("Sum = " + sum);

    // Java 8 approach
    values.forEach((value) -> System.out.println(value));
    System.out.println("Sum = " + values.stream().reduce((x, y) -> x.add(y)).get());
}
Run Code Online (Sandbox Code Playgroud)

vanilla Java代码对空集合没有问题,但新的Java 8代码可以.

在这里避免使用NSEE最优雅的方法是什么?当然我们可以这样做:

System.out.println("Sum = " + values …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

3
推荐指数
2
解决办法
3147
查看次数

从 lambda 函数的结果调用方法

我有一个对象 ( Adult) 和另一个对象 ( Child) 作为参数。我正在尝试写一个Function如果给成人则返回孩子的名字。

我写了这个:

public static void main(String[] args) {
    Function<Adult, Object> adult_name_f = Adult::getName;
    Function<Adult, Object> adult_child_f = Adult::getChild;
    Function<Adult, Object> child_name_f = Adult::getChild.getName;
}

static class Adult {
    String name;
    Child child;

    public Child getChild() {
        return child;
    }

    public String getName() {
        return name;
    }
}

static class Child {
    String name;

    public String getName() {
        return name;
    }
}
Run Code Online (Sandbox Code Playgroud)

但(显然)Adult::getChild.getName不是有效的Function.

如果把孩子的名字交给大人,有没有办法归还孩子的名字?

java lambda

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