小编Nik*_*sov的帖子

JScrollPane中的JTable:禁用滚动条的最佳高度

我使用以下代码创建JTable内部JScrollPane以显示列标题

JTable不会显示列标题

String[] columnNames = {"header1", "header2", "header2", "header3"};
Object[][] data = new Object[num][4];
//feed values into data using for

JTable chart = new JTable(data, columnNames);
chart.setShowVerticalLines(false);
chart.setEnabled(false);
chart.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

JScrollPane sp = new JScrollPane(chart);
sp.setPreferredSize(new Dimension(width, chart.getHeight() + 5));
panel.add(sp);
Run Code Online (Sandbox Code Playgroud)

问题是我需要计算一个高度,JScrollPane这样整体JTable就可以看到而且JScrollBar不会出现.我怎样才能做到这一点?

num从2更改为4,如果是4,则会出现滚动条. width是固定的.

java size swing jtable jscrollpane

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

为什么允许静态方法调用私有方法?

我之前从未尝试过编写以下代码,因为它在生产中没有多大意义.但令我惊讶的是,这段代码成功编译.为什么它被设计为允许在同一个类的实例上从静态方法调用私有方法?

public class Beverage {
    private void drink () {
        System.out.println("Beverage");
    }

    public static void main (String[] args) {    
        Beverage b = new Beverage();
        b.drink(); //call to private method!
    }
}
Run Code Online (Sandbox Code Playgroud)

java static encapsulation private

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

从方法返回空集合

在第二种方法中使用第一种方法是否有任何内存/性能优势?

第一

public List<Integer> getList1(List<Integer> data) {
    List<Integer> list = new ArrayList<Integer>();
    for (Integer element: data) {
        if (element % 2 == 0) {
           list.add(element);
        }
    }
    return list.isEmpty() ? Collections.<Integer>emptyList() : list;
}
Run Code Online (Sandbox Code Playgroud)

第二

public List<Integer> getList2(List<Integer> data) {
    List<Integer> list = new ArrayList<Integer>();
    for (Integer element: data) {
        if (element % 2 == 0) {
           list.add(element);
        }
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

java collections performance garbage-collection

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

JScrollPane adjustListener 和 scrollRectToVisible

JScrollPane当用户滚动它时,我需要处理事件。在这里建议使用addAdjustmentListenertoJViewport或 Vertical/Horizo​​ntalScrollBar。

有什么区别,我应该选择哪种方法?

我也想用scrollRectToVisible同样的方法JScrollPane,我应该期待AdjustmentListener使用这种方法吗?

另外我想知道是否scrollRectToVisible尝试进行最小滚动以使所需的矩形可见,还是尝试使其在JViewport?

UPD:要求:

1) 有一个 JScrollPane,其中一个 JPanel 有许多 JLabel(ImageIcon),因此其中一些不可见。

2)当网络事件发生时,我需要向用户显示 JLabel 之一(使其可见)。如果 I 最初不可见,则 JScrollPane 应自动滚动。这就是为什么我提到scrollRectToVisible.

3) 在里面有 ImageIcon 的 JLabel 上方,我需要显示一条消息来解释这个元素发生了什么。由于 JLayeredPane 层次结构更高,该消息当前被实现为另一个带有浮点数的 JLabel。现在的问题是,如果用户滚动 JScrollPane,浮动 JLabel 应该相应地移动到相应 JLabel(ImageIcon) 的顶部。

UDP2:SSCCE

我还没有实现浮动 JLabel,但我已经不喜欢索引为 11 的标签的反应,scrollRectToVisible因为它被裁剪了一半。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList; …
Run Code Online (Sandbox Code Playgroud)

java swing jscrollpane jscrollbar jviewport

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

从另一个java进程在Windows控制台中运行java进程

我试图从我的Java进程启动另一个Java进程.问题是我希望Windows控制台出现,而AnotherApp要写入该控制台.

此Java代码段确实启动了一个新进程,但未显示控制台.

ProcessBuilder pb = new ProcessBuilder("cmd", "/k", "java", "-jar", "AnotherApp.jar");
pb.start();
Run Code Online (Sandbox Code Playgroud)

如果我从Start - Run运行

cmd /k java -jar AnotherApp.jar
Run Code Online (Sandbox Code Playgroud)

然后创建一个新的控制台并启动java进程.

java windows console jar processbuilder

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

Eclipse是否安装在C盘中?

我有一个可能有点愚蠢的问题.我正在从Netbeans更改为Eclipse,我注意到Eclipse不会安装在我的C:驱动器上,也不会出现在开始菜单上,或者出现在删除程序窗口中.当我运行安装它只是打开,我必须从该文件中使用它.

我用错了吗?或者它应该是那样的?如果没有,我如何正确安装eclipse?谢谢.

java eclipse windows ide installation

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

如何验证命令行参数中的用户输入以提高安全性?

我正在通过命令行参数从用户String进入Java程序。

问题是我应该执行哪种检查以防止可能的攻击和漏洞?

我不是安全领域的专家,但据我所知

  • C中,用户指定的行太长且处理不当可能导致缓冲区溢出
  • 在包含`字符且处理不当的PHP行中,可能会导致SQL注入

目前,我无法考虑使用任何String正则表达式进行检查的任何特定格式。它可以是任意的,但是如果看起来有害,我想立即退出。该字符串可能会发送到具有网络的Java服务器,在那里可能用于SQL查询。

if (args.length > 0) {
    String arg0 = args[0];
    if (!isValidString(arg0)){
        System.exit(1);
    }
}

public boolean isValidString (String str) {
    if (str == null) return false;

    //TODO: many more checks here

    return true;
}
Run Code Online (Sandbox Code Playgroud)

我确信Java比C或早期的PHP安全得多,但是我应该注意些什么呢?

java security console command-line-arguments

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

Eclipse复制注释@SurpressWarnings for PMD

我试图为我的班级禁用几个任意的PMD警告.

如何列出几个要忽略的PMD规则?我无法找到谷歌.

@SuppressWarnings("PMD.OnlyOneReturn")
@SuppressWarnings("PMD.ShortVariable")
public class MyClass {
Run Code Online (Sandbox Code Playgroud)

它给出了Eclipse编译时错误:

Duplicate annotation @SurpressWarnings
Run Code Online (Sandbox Code Playgroud)

这是可编译但被忽略的

@SuppressWarnings("PMD.OnlyOneReturn, PMD.ShortVariable")
Run Code Online (Sandbox Code Playgroud)

这个

@SuppressWarnings("PMD.OnlyOneReturn", "PMD.ShortVariable")
Run Code Online (Sandbox Code Playgroud)

结果是

Syntax error on token ,
Run Code Online (Sandbox Code Playgroud)

Eclipse配置为接受PMD类型:

不支持的@SuppressWarnings("PMD.DoNotCallSystemExit")

java eclipse warnings pmd

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

为什么要在小物体上同步?

Java性能中的同步块如何取决于正在执行同步的对象大小?

synchorized (lock) {
    //some code here
}
Run Code Online (Sandbox Code Playgroud)

想象一下锁可能就像以前一样new Object(),或者它可能是不可变类的实例,但是初始化了大量的字段.

java synchronization

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