小编mre*_*mre的帖子

在keypress上删除JList项目的例外情况

我在JList中遇到NullPointerException,但异常的来源似乎是Swing事件处理代码.JList有一个键监听器,当按下Delete键时,它将删除所选项.仅在列表中的第二个和所有后续删除上抛出异常.关于如何修复它的任何想法?

重现问题的示例代码和生成的异常包括在下面:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JList;

public class Sample {

    public static void main(String[] args) {
        final JFrame frame = new JFrame();

        final Vector<String> list = new Vector<String>();
        for (int i = 0; i < 5; ++i) {
            list.add("String " + i);
        }

        final JList listView = new JList(list);

        listView.addKeyListener(new KeyListener() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_DELETE) {
                    list.remove(listView.getSelectedIndex());
                    listView.updateUI();
                }
            }

            @Override
            public void keyReleased(KeyEvent e) { } …
Run Code Online (Sandbox Code Playgroud)

java swing jlist

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

将参数传递给JButton ActionListener

我正在寻找一种方法将变量或字符串或任何东西传递给JButton的匿名actionlistener(或显式actionlistener).这是我有的:

public class Tool {
...
  public static void addDialog() {
    JButton addButton = new JButton( "Add" );
    JTextField entry = new JTextField( "Entry Text", 20 );
    ...
    addButton.addActionListener( new ActionListener( ) {
      public void actionPerformed( ActionEvent e )
      {
        System.out.println( entry.getText() );
      }
    });
  ...
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我只是声明entry是一个全局变量,但我讨厌这样做的方式.还有更好的选择吗?

java swing jbutton actionlistener

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

GridLayout不遵守每列我想要的行数

我有以下,

GridLayout layout = new GridLayout(4, 0);
Run Code Online (Sandbox Code Playgroud)

如果我有5项目,这将创建2列,其中第一个包含3行,第二个包含2行.这不是我想要的,也不是我所期望的.我希望第一列包含4行,第二列包含1行.

为什么这个布局管理器不符合每列我想要的行数?或者更好的是,我如何让这个布局经理尊重这个?

java swing awt layout-manager grid-layout

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

AffineTransform的问题

你好我是affineTransformjava 新手.我想用它来剪切一些我以后要使用的GUI.现在我只想测试一个示例代码,但我无法解释它的输出.这是代码

    package main;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.AffineTransform;

    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class MainClass{
    public static void main(String[] args) {
    JFrame jf = new JFrame("Demo");

    jf.getContentPane().add(new MyCanvas());

    jf.setSize(600, 600);
    jf.setVisible(true);
  }
}

    class Left extends JPanel {

    Left(){
        setPreferredSize(new Dimension(450,450));
        setBorder(BorderFactory.createLineBorder(Color.green));
        setBackground(Color.gray);

    }


      public void paintComponent(Graphics g) {

            super.paintComponent(g);

            Graphics2D g2 = (Graphics2D) g;

            AffineTransform at = new AffineTransform();

            g2.setTransform(at);

            g2.drawRect(getWidth()/2 - 10, getHeight()/2 - 10, 20, …
Run Code Online (Sandbox Code Playgroud)

java swing java-2d affinetransform

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

Java mouselistener

我如何编写一个鼠标监听器,它会对按下JFrame某个特定对象上的任何对象作出反应?

这是我的老鼠听众 -

class mouse extends MouseAdapter
{
   public void  mousePressed(MouseEvent event)
   {
     yearLabel.setText("nu");
   }
 }
Run Code Online (Sandbox Code Playgroud)

java swing jlabel mouselistener

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

JTextPane删除第一行

我得到的Document对象JTextPane,包含方法remove,但具体的字符数textPane.getDocument().remove(begin,end).我想删除整个第一行.

java swing jtextpane

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

如何在JButton图标上方和下方设置文本?

我想设置文本上方和下方一个JButton的图标.目前,为了实现这一点,我覆盖了布局管理器并使用了三个JLabel实例(即2个用于文本,1个用于图标).但这似乎是一个肮脏的解决方案.

有更直接的方法吗?

注意 -
我不是在寻找多线解决方案,我正在寻找一种多标签解决方案.虽然条是指它作为一个多行的解决方案,它实际上似乎是指一个多标签解决方案.


import java.awt.Component;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public final class JButtonDemo {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }


    private static void createAndShowGUI(){
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());
        frame.add(new JMultiLabelButton());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true); …
Run Code Online (Sandbox Code Playgroud)

java swing jbutton

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

如何迭代SortedSet来修改其中的项目

我想说我有一个List.在for循环中修改list的项目没有问题:

for (int i = 0; i < list.size(); i++) { list.get(i).setId(i); }
Run Code Online (Sandbox Code Playgroud)

但是我有一个SortedSet而不是list.我怎么能用它呢?谢谢

java iterator sortedset

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

"这个"参考在施工过程中逃脱了吗?

如果我这样做,

final class FooButton extends JButton{
    FooButton(){
        super("Foo");
        addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                // do stuff
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我让this引用隐含地逃脱了吗?

java constructor

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

调用validate后,Container不会自行调整大小

通过add和手动交换组件后remove,我调用validate()容器.根据文件,

validate方法用于使容器再次布置其子组件.在显示容器后修改此容器的子组件(添加到容器中或从容器中删除,或更改布局相关信息)时,应调用它.

短语" 再次布置其子组件 "让我觉得容器会相应调整大小,但事实并非如此.相反,在调用之后validate(),我还需要调用pack()以查看其所有子组件.

为什么是这样?难道我做错了什么?

java swing containers resize

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