小编bri*_*ium的帖子

是否可以在Swing中为多个文本字段提供单个文档侦听器

我在JTable上有12个12列过滤器.每个过滤器都是JTextField类型的TextField.每次用户在文本框过滤器中输入数据时,都会进行搜索.

示例: 假设我说它上面有3列和3个文本框作为过滤器.现在,任何在我的表过滤必须发生的任何文本框中键入的内容都会发生.它发生得很好.

???????????????????????????????????????????
? [TextField] ? [TextField] ? [TextField] ?
???????????????????????????????????????????
?             ?             ?             ?
???????????????????????????????????????????
      ...           ...           ...
???????????????????????????????????????????
?             ?             ?             ?
???????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

每个文本字段的文本字段侦听器如下所示,

textField.getDocument().addDocumentListener(new DocumentListener() {
  public void changedUpdate(DocumentEvent e) { method(); } 
  public void removeUpdate(DocumentEvent e) { method(); }
  public void insertUpdate(DocumentEvent e) { method(); } 
};
Run Code Online (Sandbox Code Playgroud)

我的问题是,我正在为所有12个文本字段重复此代码,我并不高兴.这是我们唯一的方式吗?或者有人可以建议我一个更好的方法?

java swing jtable listener jtextfield

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

java 2不同的公式问题

我想使用Java程序计算球体的体积.所以,我用过

double result = 4/3*Math.PI*Math.pow(r,3);
Run Code Online (Sandbox Code Playgroud)

这个公式似乎给出了错误的答案.

像Java程序opt 4/3,但如果我改成它

double result= Math.PI*Math.pow(r,3)*4/3;
Run Code Online (Sandbox Code Playgroud)

它给了我正确的答案.有人知道发生了什么吗?

java

5
推荐指数
2
解决办法
94
查看次数

JComboBox返回值

使用什么方法返回用户选择的选择?

JPanel ageSelection = new JPanel();
JLabel age = new JLabel("Age:");

ArrayList<Integer> ageList = new ArrayList<Integer>();

for (int i = 1; i <= 100; ++i) {
    ageList.add(i);
}

DefaultComboBoxModel<Integer> modelAge = new DefaultComboBoxModel<Integer>();
for (Integer i : ageList) {
    modelAge.addElement(i);
}

JComboBox<Integer> ageEntries = new JComboBox<Integer>();
ageEntries.setModel(modelAge);

ageEntries.addActionListener(new putInTextListener());

ageSelection.add(age);
ageSelection.add(ageEntries);


class putInTextListener implements ActionListener {
    public void actionPerformed (ActionEvent event) {
        ageEntries.getSelectedItem();
    }
}
Run Code Online (Sandbox Code Playgroud)

当添加最后一行(ageEntries.getSelectedItem();)时,我收到一个错误:

线程"AWT-EventQueue-0"中的异常java.lang.NullPointerException

有任何想法吗?

编辑代码:

class putInAgeListener implements ItemListener {
    public void itemStateChanged(ItemEvent e) …
Run Code Online (Sandbox Code Playgroud)

java swing jcombobox java-7

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

使用xPath修改XML文件

我想使用xPath修改现有的XML文件.如果该节点不存在,则应创建该节点(如果需要,则与其父节点一起创建).一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <param0>true</param0>
  <param1>1.0</param1>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这里有几个我要插入/修改的xPath:

/configuration/param1/text()         -> 4.0
/configuration/param2/text()         -> "asdf"
/configuration/test/param3/text()    -> true
Run Code Online (Sandbox Code Playgroud)

之后XML文件应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <param0>true</param0>
  <param1>4.0</param1>
  <param2>asdf</param2>
  <test>
    <param3>true</param3>
  </test>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我试过这个:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

try {
  DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
  Document doc = domFactory.newDocumentBuilder().parse(file.getAbsolutePath());
  XPath xpath = XPathFactory.newInstance().newXPath();

  String xPathStr = "/configuration/param1/text()";
  Node node = ((NodeList) xpath.compile(xPathStr).evaluate(doc, XPathConstants.NODESET)).item(0);
  System.out.printf("node value: %s\n", …
Run Code Online (Sandbox Code Playgroud)

java xml xslt xpath file

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

如何删除自动轴标签拉伸?

我在用JFreeChart 1.0.14.如果情节太小/太大,我轴的标签会非常奇怪.我想关闭这种行为,并希望轴标签始终以相同的宽度:高度比打印.

拉伸

这是一个SSCCE:

import java.awt.BorderLayout;

import javax.swing.JFrame;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());

        XYSeries series = new XYSeries("series a");
        for (int i = 0; i < 100; i++)
            series.add(i, Math.sin(i / 2.0) * Math.cos(i / (2.0 + Math.random())));
        XYSeriesCollection dataset = new XYSeriesCollection(series);
        JFreeChart chart = ChartFactory.createXYLineChart("", "x-axis", "y-axis", dataset, PlotOrientation.VERTICAL, false, false, false);
        ChartPanel …
Run Code Online (Sandbox Code Playgroud)

java scaling label axis jfreechart

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

Java球体积计算

我有一个Java类,我对此问题感到困惑.我们必须制作音量计算器.您输入球体的直径,程序吐出体积.它适用于整数,但每当我在它上面输入一个小数时,它就会崩溃.我假设它与变量的精度有关

double sphereDiam;
double sphereRadius;
double sphereVolume;

System.out.println("Enter the diamater of a sphere:");
sphereDiam = keyboard.nextInt();
sphereRadius = (sphereDiam / 2.0);
sphereVolume = ( 4.0 / 3.0 ) * Math.PI * Math.pow( sphereRadius, 3 );
System.out.println("The volume is: " + sphereVolume);
Run Code Online (Sandbox Code Playgroud)

所以,就像我说如果我输入一个整数,它工作正常.但是我输了25.4并且它在我身上崩溃了.

java volume calculator

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

多线程程序中的意外输出

class ThreadSafe implements Runnable {
  int arr[]=new int[]{1,2,3,4,5};
  int sum=0;
  public void run() {
    int result=sum();
    System.out.println("for "+Thread.currentThread().getName()+"the value        is"+result);
  }

  public int sum() {
    for(int i=0;i<5;i++) {
      sum=sum+arr[i];
      System.out.println("calculating sum for      thread"+Thread.currentThread().getName()+"sum ="+sum);
      try {
        Thread.sleep(10);
      } catch(Exception e) {}
    }
    return sum;
  }

  public static void main(String...d) {
    ThreadSafe ts=new ThreadSafe();
    ThreadSafe ts1=new ThreadSafe();
    Thread t=new Thread(ts);
    Thread t1=new Thread(ts1);
    t1.start();
    t.start();
  }
}
Run Code Online (Sandbox Code Playgroud)

我期待输出不会来15.因为sum方法不同步所以多一个线程可以同时执行sum方法

我期待的是因为2个线程会立即执行sum方法所以输出不应该是15,因为第一个线程会将sum的值更新为某个值,该值将被另一个线程读取.

所以我的问题是为什么即使我没有同步sum()方法,程序的输出也按照我期望的方式出现?

java multithreading

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

设置JTabbedPane中特定选项卡的可见性

如何在JTabbedPane隐形中设置一些标签?我尝试过使用JTabbedPane#getTabComponentAt(index).setVisible(false);,但它会抛出一个NullPointerException.我可以禁用选项卡,但不能使它们不可见.

SSCCE:

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;

public class Main {
    public static void main(String[] args) {
        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.setPreferredSize(new Dimension(400, 100));
        for (int i = 0; i < 7; i++)
            tabbedPane.add("tab " + i, new JLabel("content " + i));

        // this throws a NullPointerException
        tabbedPane.getTabComponentAt(1).setVisible(false);
        // this works
        tabbedPane.setEnabledAt(1, false);

        JFrame frame = new JFrame();
        frame.setContentPane(tabbedPane);
        frame.pack();
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法找出我做错了什么.

java swing visibility nullpointerexception jtabbedpane

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

在Java中模拟随机事件

我正在Absolute Java,第5章,练习3中进行一次练习.面对一个令我困惑的问题.
让我先介绍一下背景.

问题是:

在Puzzlevania的土地上,Aron,Bob和Charlie争论其中哪一个是有史以来最伟大的益智游戏.

为了一劳永逸地结束辩论,他们同意了对死的决斗.亚伦是一名可怜的射手,他的命中率只有1> 3.鲍勃有点好,并以1> 2的概率击中他的目标.查理是一名专家射手,从未错过.

击中意味着杀戮,并且击中的人掉出决斗.为了弥补他们射击技巧的不公平性,三人决定轮流射击,首先是亚伦,然后是鲍勃,然后是查理.这个循环会重复,直到有一个人站着,那个人将成为史上最伟大的益智者.一个明显而合理的策略是每个男人都能以最准确的射手仍然活着射击,理由是这个射手是最致命的并且有最好的击球机会.

编写程序以使用此策略模拟决斗.你的程序应该使用随机数和问题中给出的概率来确定射手是否击中了目标.创建一个名为Duelist的类,其中包含dueler的名称和射击精度,一个指示deadler是否还活着的布尔值,以及一个方法ShootAtTarget(Duelist target),如果deadler击中他的目标,则将目标设置为dead(使用随机数和射击准确性),否则什么都不做.

一旦你可以模拟一个决斗,为你的程序添加一个模拟10,000决斗的循环.计算每位参赛者获胜的次数并打印每位参赛者的获胜概率(例如,对于Aaron,您的计划可能会输出"Aaron赢得3,595> 10,000次决赛或35.95%").另一个策略是让Aaron故意错过他的第一枪.修改程序以适应这种新策略并输出每个参赛者的获胜概率.对于亚伦来说哪种策略更好:故意错过第一杆或尝试击中最好的射手?谁有最好的获胜机会,最好的射手或最差的射手?

我的问题是:

如何使用随机数和问题中给出的概率来确定射手是否击中目标?

我不明白为什么要使用随机数和概率,它们之间有什么关系吗?

java

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

在Java中调用的这种实例化是什么?

对于Java来说,这可能是一个非常基本的问题,但我不记得它,也不知道如何在线搜索它.

button.setOnClickListener(new OnClickListener()
{
  @Override
   public void onClick(View v)
   {
     Thread.sleep(100);
   }
}
Run Code Online (Sandbox Code Playgroud)

我习惯使用类似的构造函数初始化对象new OnClickListener(arg1, arg2, ...).根据我自己的经验,我在构造对象时从不覆盖方法.我只是在扩展课程时才这样做.如果有任何术语,那么在Java中调用的这种实例化是什么?在其他情况下我们应该使用它吗?

java methods constructor overriding instantiation

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