小编Sil*_*eak的帖子

使用Swing组件作为内容的自定义Java工具提示不会显示

我试图在组件的工具提示中显示多个图像,找到createToolTip()并实现了一个自定义,添加了所需的组件,如下所示:

setComponent(component);

JPanel images = new JPanel(null);
images.setLayout(new BoxLayout(images, BoxLayout.X_AXIS));
for(ImageIcon icon:myIcons) {
    images.add(new JLabel(icon));
}

JPanel content = new JPanel(new BorderLayout());
content.add(new JLabel(title), BorderLayout.NORTH);
content.add(new JLabel(description));
content.add(images, BorderLayout.SOUTH);

add(content);
Run Code Online (Sandbox Code Playgroud)

但是,我看到的只是一个小点,表示显示了工具提示,但不知何故忽略了大小.我错过了实施自定义工具提示的内容?

java layout swing tooltip

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

Maven:代码生成之前的部分编译

tl; dr-edition:我有一个编译,我知道它会失败,但是想要编译target/classes后仍可在我的文件夹中编译的类的子集。我已经配置了<failOnError>false</failOnError>,但没有生成任何类,甚至没有生成一个虚拟类,该虚拟类独立于除以外的任何其他类Object。是否有一些配置可以实现这一目标?


我有一个由Maven驱动的项目,该项目的工作流程基本上包括以下(相关)目标:

  • ...
  • init-compile

    代码生成器(下面)使用基于反射的配置,因此,在第一遍中,我想尝试编译尽可能多的项目,以便不向其中抛出ClassNotFoundExceptions。配置了此编译,<failOnError>false</failOnError>以便继续构建。

    不幸的是(您可以称其为设计缺陷),该配置用于代码生成(指定OWL文件和命名空间以映射到程序包)和运行时,因此它还包含代码生成器不需要的其他元素,但是仍然被读取,因此需要在类路径上才能成功。

  • generate-model

    在此步骤中,将从OWL-Ontology生成一些模型类,从而创建使项目的其余部分完全可编译的代码。

  • default-compile

    现在,显然应该编译其余的类

  • save-model

    现在,将读取本体中的实例并将其序列化为文件以进行运行

  • ...

旁注:生成和保存模型都使用maven-exec-plugin,但我真诚地认为这根本不重要。

题:

当我使用运行我的构建时mvn -e -U clean package source:jar javadoc:jar install:install,它在generate-model目标执行过程中因我要避免的错误而失败。target/classes是空的,因此似乎编译器不会吐出它本可以/应该能够处理的类的子集。有没有办法做到这一点?

我有两个我都不喜欢的变通办法:

  • 在将配置文件“ AST”解析为Java对象之前,先对其进行编辑,以便仅解析与代码生成器相关的部分(需要对我可以访问的代码进行调整,但我的项目应将其视为不可变的);
  • 并将init-compile目标配置为仅包括所需的类(太不灵活,因为POM应该/可能是使用同一模型的将来应用程序的模板)。

如果您可以想象从描述中看到解决我的问题的另一种方法,那么我也很高兴听到他们的声音!

java maven

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

如何使用多个参数列表消除案例类创建的歧义?

我有一个看起来像这样的案例类:

case class A(first: B*)(second: C*)
Run Code Online (Sandbox Code Playgroud)

这两个firstsecond重复,所以我把在不同的参数列表.但是,我希望second在很多情况下可能是空的,所以能够像A(???, ???)没有尾随空括号那样使用类就好了.我尝试了以下方法:

case class A(first: B*)(second: C*) {
  def this(first: B*) = this(first: _*)()
}
Run Code Online (Sandbox Code Playgroud)

哪能给我ambiguous reference to overloaded definition.

有没有办法明确地编写这个构造函数调用?(并且我能够调用重载的构造函数而不会再次混淆语法吗?)我的猜测是否定的,有一些关于这种语法糖会如何破坏currying或其他一些问题的争论,但我更愿意听到来自某人的声音比我更多Scala知识;)

scala currying

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

装饰方法时访问绑定方法或 self

我有一个用例,我想用一种额外的调用方法来装饰一个方法,例如在以下代码中:

def decorator(func):
    def enhanced(*args, **kwargs):
        func(*args, **kwargs)

    func.enhanced = enhanced
    return func

@decorator
def function():
    pass

class X:
    @decorator
    def function(self):
        pass

x = X()

function()
function.enhanced()
x.function()
# x.function.enhanced()
x.function.enhanced(x)
Run Code Online (Sandbox Code Playgroud)

前三个调用按预期工作,但x.function.enhanced()没有;我必须写信x.function.enhanced(x)才能让它发挥作用。我知道这是因为func传递给装饰器的不是绑定方法而是函数,因此需要传递self显式传递。

但我该如何解决这个问题呢?从我对描述符的一点了解来看,它们仅在查找类时才相关,而func不是类,func.enhanced不会以我可以拦截的方式查找。

我在这里可以做些什么吗?

python python-decorators python-descriptors

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

编写一个 Rust 宏重复,它可能会也可能不会初始化结构体字段

我正在尝试编写一个列出多个结构字段的宏,但有条件地仅从列表中的某些字段创建初始化程序代码。具体来说,可能看起来像这样:

#[test]
fn test() {
    #[derive(PartialEq, Debug)]
    struct Foo {
        bar: usize,
    }

    let a = Foo {
        bar: 0,
    };

    let b = test!(Foo {
        bar: 0,
        #[nope] baz: 0,
    });

    assert_eq!(a, b);
}
Run Code Online (Sandbox Code Playgroud)

Foo没有 field baz,并且#[nope]应该告诉宏对该字段不执行任何操作;真正的宏会baz在一个位置使用,但不会在另一个位置使用,并且还需要处理其他“属性”。

这是接受调用但不忽略的基线宏baz

macro_rules! test {
    (
        $struct:ty {
            $($(#[$modifier:ident])? $field:ident: $value:expr,)*
        }
    ) => {
        {
            // don't mind this syntax workaround
            type X = $struct;
            X {
                $($field: $value,)*
            }
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

现在,我知道对不同的重复使用不同的规则的技巧是将每个重复委托给辅助规则。这是相同的宏,将常规变体和不变体分开: …

macros rust

5
推荐指数
0
解决办法
705
查看次数

Git如何确定需要在存储库之间发送哪些对象?

我已经看过这里,但无法弄清楚我想知道的事情:如何git pushgit pull弄清楚另一边缺少哪些提交对象?

假设我们有一个包含以下提交的存储库:(字母代表SHA-1 ID,drefs/heads/master)

a -> b -> c -> d
Run Code Online (Sandbox Code Playgroud)

相比之下,遥控器具有:

a -> e -> f -> g
Run Code Online (Sandbox Code Playgroud)

根据git文档,遥控器会告诉我们它refs/heads/master处于g,但由于我们不知道该提交,这实际上并没有告诉我们什么.怎么能够找出丢失的数据?


在另一个方向,该文件说:

此时,fetch-pack进程会查看它拥有的对象,并通过发送"want"然后发送它想要的SHA-1来响应它所需的对象.它使用"have" 发送它已经拥有的所有对象,然后发送SHA-1.在此列表的末尾,它写入"done"以启动upload-pack进程以开始发送所需数据的packfile:

这解释了遥控器如何确定要发送的数据,但这不会影响具有许多对象的存储库的性能吗?否则,文本中实际意味着什么呢?


显然,根据方向(推动与拉动),数据传输的方式是非常不同的.这个设计选择遇到了什么以及如何遇到挑战,我如何理解文档中的描述?

git git-pull git-push git-fetch

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

Django &amp; Graphene:如何处理多态模型的双向关系?

我有一个看起来像这样的 Django 模型(当然是简化的):

from django.db import models
from polymorphic.models import PolymorphicModel

class Tournament(models.Model):
    slug = models.CharField(max_length=100, unique=True)

class Event(PolymorphicModel):
    tournament = models.ForeignKey(Tournament, related_name='events')
    slug = models.CharField(max_length=100)

class PracticeEvent(Event):
    pass

class MatchEvent(Event):
    winner = models.CharField(max_length=100, null=True, blank=True, default=None)
Run Code Online (Sandbox Code Playgroud)

锦标赛包括两种赛事:练习赛和比赛。我想使用 GraphQL 和 Graphene 公开这个模型。这是我想出的:

import graphene
from graphene_django import DjangoObjectType

from . import models

class TournamentType(DjangoObjectType):
    class Meta:
        model = models.Tournament
        exclude_fields = ('id',)

class EventType(graphene.Interface):
    tournament = graphene.Field(TournamentType, required=True)
    slug = graphene.String(required=True)

class PracticeEventType(DjangoObjectType):
    class Meta:
        model = models.PracticeEvent
        interfaces = …
Run Code Online (Sandbox Code Playgroud)

django graphene-python

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

`make` 没有注意到 Rust 模块中的修改 - 如何更好地将 Rust 集成到构建中?

在一个简单的嵌入式项目中,我有两个文件main.rsmodule.rs. 为了构建该项目,我使用类似的东西:

all: main.o
    $(CC) main.o $(LDFLAGS)

%.o: %.rs
    $(RUSTC) $(RUSTFLAGS) -o ${@} ${<}
Run Code Online (Sandbox Code Playgroud)

如果仅module.rs更改,make all则不会重新编译我的 Rust 代码。我怎样才能解决这个问题?


作为第一步,我发布了一个次优的自我回答,但希望看到更好的方法。

makefile rust

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

为什么size_of :: <&T>()== size_of :: <usize>()取决于T是否大小?

文档size_of如下:

如果T是大小,则所有这些类型[指针类型&T]等具有相同的大小usize.

为什么那个资格赛?无论指向哪种类型的属性,指针都不具有确定的大小?

rust

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

使用 react-apollo 重新获取查询:为什么 `loading` 不是真的?

我正在尝试 Apollo 并使用以下相关代码:

const withQuery = graphql(gql`
query ApolloQuery {
  apolloQuery {
    data
  }
}
`);

export default withQuery(props => {
  const {
    data: { refetch, loading, apolloQuery },
  } = props;

  return (
        <p>
          <Button
            variant="contained"
            color="primary"
            onClick={async () => { await refetch(); }}
          >
            Refresh
          </Button>
          {loading ? 'Loading...' : apolloQuery.data}
        </p>
  );
});
Run Code Online (Sandbox Code Playgroud)

服务器延迟 500 毫秒,然后再发送{ data: `Hello ${new Date()}` }作为有效负载的响应。当我单击按钮时,我希望看到Loading...,但组件仍然会在Hello [date]半秒后显示并重新渲染。

根据,在networkStatus应该是4( refetch),并且因此loading应该是真实的。我的期望错了吗?或者 …

apollo reactjs graphql react-apollo apollo-client

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

Scala:如何模式匹配内部案例类的封闭对象?

我有一个内部案例类,特别是来自这个问题的事件,并且想要匹配它,包括外部对象:

class Player {
  var _life = 20
  def life = _life

  def gainLife(life: Int) = execute(GainLife(life))

  case class GainLife(life: Int) extends Event {
    def execute() = _life += life
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以轻松编写一个替换特定玩家生活事件的效果(部分功能):

//gain twice as much life
def effect(player: Player): ReplacementEffect = {
  case player.GainLife(x) => player.GainLife(x * 2)
}
Run Code Online (Sandbox Code Playgroud)

但是,对于其他玩家我不能这样做.我最接近的是:

//only you gain life
def effect2(player: Player): ReplacementEffect = {
  case evt: Player#GainLife => player.GainLife(evt.life)
}
Run Code Online (Sandbox Code Playgroud)

但是1)这甚至取代了你自己的生活费用新的生活费用,2)我不能引用最初在功能中获得生命的玩家和3)我错过了直接匹配life这种方式.

这可以使用与路径无关的类型表示

case Player.GainLife(_player, life) if _player != …
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching case-class

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