小编Val*_*eri的帖子

Java内部类的使用和实例化

前段时间我用Java编写了一个小图像查看器/处理程序,如果你愿意的话.

我希望有一个下拉菜单,我可以选择我打开的哪一个图像"在桌面上",即.显示和应用的方法.我希望图像的名称是菜单中显示的JMenuItem的名称.我还想在添加新图像时出现一个新按钮.

我想了一段时间并最终制作了这个解决方案,这是一个新的类,可以在添加图像时处理新按钮的创建.代码如下:

import java.awt.event.*;
import javax.swing.*;
import java.util.*;


public class ImageList{

    private ArrayList<JMenuItem> list;
    private ImageHandler main;
    private ImageLevel img;

    public ImageList() {}

    public void setHandler(ImageHandler hand) {
        main = hand;
        img = main.getImg1();
    }

    public void add(Buffer addi) {
        final String added = addi.getName();
        JMenuItem uusi = new JMenuItem(added);

        main.getMenu5().add(uusi);
        uusi.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                img.setBuffer(added);
                main.getScr().updateUI();
            }
        });
   }
}
Run Code Online (Sandbox Code Playgroud)

这应该是正常的.对于这个网站,我把原来的芬兰名字翻译成了英文,想知道为什么我最初用芬兰语写这些名字......我很痴迷于命名.

在程序运行时,应该多次调用方法add.

我无法理解的是ActionListener接口的内部类实现,即它的编译及其工作原理.

如果我的界面上有两个按钮,我希望它们做不同的事情,我需要两个内部类,每个类有一个,每个类都有自己的ActionListener接口的内部实现.但是在我的代码中有一个类似乎可以完成许多工作,一个编译的.class文件,但最终的结果就好像有很多.

有人可以就这个问题教育我吗?这个代码在这里是一个类,新的按钮是它的实例吗?他们是新班吗?每个新按钮应该有一个新的.class文件吗?等等...

java user-interface swing inner-classes

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

循环继承使用

所以如果我用Java编写以下代码:

public class A extends A{
    public static void main(String[] args){
    }
}
Run Code Online (Sandbox Code Playgroud)

这给出了涉及A的编译器错误消息循环继承.

如果我写两个A和B类,A继承B和B继承A,也会发生同样的情况.

这对我来说很有意义,因为很难想象无论如何这都是可能的.

然后我从我的大学的一位教授那里询问了这件事.他说有些语言是可能的,他感叹遗憾的是,这在Java中是不可能的,并且他已经完成了一些他曾使用过循环继承等项目,但我真的无法理解它.他还提到他曾经有过他希望使用循环继承的问题.

你能教育我这种奇怪的循环继承现象的可能用途吗?什么时候可能,怎么样?这有什么问题吗?

java inheritance

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

SPARQL 查询只获取最近日期的结果

我正在使用芬兰司法部最近发布的 RDF 数据库学习 SPARQL 的基础知识。它包含芬兰法律数据。

有法规,有版本,有日期和主题。我想获得具有“枪”主题的最新版本。所以,我写了这个:

PREFIX sfl: <http://data.finlex.fi/schema/sfl/>
PREFIX eli: <http://data.europa.eu/eli/ontology#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?stat ?vers ?dv 
WHERE { 
   ?stat rdf:type sfl:Statute .
   ?stat sfl:hasVersion ?vers .
   ?vers eli:version_date ?dv .
   ?vers eli:is_about ?top .
   ?top skos:prefLabel "Ase"@fi .

 } ORDER BY DESC(?dv)
Run Code Online (Sandbox Code Playgroud)

这将返回四行,三个法规,一个法规两次。这是因为该法规有两个版本,旧版本和当前版本。另外两个法规只有一个版本。

如何摆脱旧版本,以便仅获得最新版本的法规?我尝试使用类似的东西(MAX(?dv) AS ?ndv)并按 ?stat 和 ?vers 分组,但这不起作用,因为有四个不同的版本。

编辑:让我添加一个模拟示例来说明发生的情况。

原始查询的结果如下所示:

stat | vers | dv
 a   | abc  |  x
 a   | cde  |  y(<x)
 b   | foo  |  z …
Run Code Online (Sandbox Code Playgroud)

database rdf sparql

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

求解Prolog中的方程组

假设我有一个数字X,我希望求解方程组,比如Y + Z = X,Z*Y = 1.

现在,这具有解Y = 1/Z和Z =(sqrt(X*X-4)+ X)/ 2或(X-(sqrt(X*X-4)))/ 2.

所以我可以在Prolog中写道:

solve(X,Y,Z):- Y is (sqrt(X*X-4)+X)/2, Z is 1/Y.
solve(X,Y,Z):- Y is (X-(sqrt(X*X-4)))/2,Z is 1/Y.
Run Code Online (Sandbox Code Playgroud)

这有效.

它需要我的许多初步工作,基本上事先解决它,只是要求Prolog评估答案.

有没有办法可以获得Z和Y,而不事先解决X?

我不能只写像

solve(X,Y,Z):- X is Y+Z, Z is 1/Y.
Run Code Online (Sandbox Code Playgroud)

因为实例化错误.

prolog constraint-programming equation-solving

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