相关疑难解决方法(0)

布局似乎有些问题,JButton在调整窗口大小时显示出意外行为

JRE版本1.7更新3

预期的行为

当我运行该程序时,它按预期工作,一切顺利.当我点击STOP JButton动画停止并且同一文本JButton改变为START.现在当我点击时BALL COLOUR JButton,BALL变化的颜色以及变化的颜色BALL COLOUR JBUTTON也会变化BALL.如果我按原样运行我的应用程序而不调整大小,则整个行为都有效.

意外行为

但当RESIZEJFrame通过拉动时Right Side,那就是当我的应用程序的意外行为被显示时,在某种意义上说,如果我按下STOP JButton然后单击BALL COLOUR按钮,JButton之前单击的文本更改为的文本STARTSTOP在不应该更改时再次更改为当它应该改变为球的颜色时,以及BALL COLOUR JButton将保持不变或将转向BLUE的颜色.我附上照片了解更多信息.但是如果你试图将它重新调整到原来的大小或更接近它,​​那么事情就会恢复正常.为什么会这样?任何想法或线索将非常感激.

正如我的应用程序运行如上所述的预期行为:

预期的行为

这里是意想不到的行为

意外行为

底线:

为什么应用程序像往常一样运行BEGINNING,而不是RESIZED通过拖动它RIGHT SIDE,但是如果你把它带到它的原始大小或更接近它,​​事情恢复正常,它按预期工作?

所以考虑到这个场景,我在程序中做错了什么.或者这正是我应该使用的情况SwingWorker,或者这是一个问题Layout,或隐藏的相关内容Content Pane.请放轻装:-)

这是我正在使用的代码,我把它降到最低限度,因为我想要证明我的问题:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class …
Run Code Online (Sandbox Code Playgroud)

java swing resize jframe jbutton

13
推荐指数
3
解决办法
6135
查看次数

Swing:JDialogs如何与JFrame对话

我正在构建我的第一个Swing应用程序,并试图找出我的JDialogs - 当用户选择JMenuItem时专门调用 - 可以更新JFrame的主客户区域中的组件,这是整个应用程序的父"窗口" .

这是我提出的设计,但不知道它是否:(1)只是简单的坏,(2)不是标准(因此最好)的方式,或(3)如果我完全偏离基础这里.任何建议都非常感谢.

基本上,用户选择JMenuItem,它启动JDialog.用户与对话框中的组件交互,然后单击"完成".如果一切都有效,那么JDialog会关闭,我希望父窗口(一个JFrame)更新其状态(并最终波及其组件).

我的设计:

有一个AppStateController是JFrame子类(我的应用程序)的成员.然后我将创建一个AppStateChangeListenerAppStateChangeEventObject子类,以便每当对话框验证并关闭时,它都会触发一个AppStateChange事件.由于父JFrame是该事件的唯一注册侦听器,因此我可以定义一个处理程序来获取传递给它的事件.我会确保AppStateChangeEvent有足够的元数据来描述所有可能的更改.

从理论上讲,我喜欢这种方法:每次不同的事件发生时,它应该是干净的,并且没有"spaghetti"类型的多个控件调用.但是,我担心它可能有点矫枉过正.

最佳实践在这里有什么要求?我不是一个真正的GUI人!

java user-interface swing

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

Java:如何从AbstractAction对象引用GUI组件?

通常需要根据另一个GUI对象的状态更改其他GUI对象的行为.例如,当按下按钮时,标签应更改其名称.但是,当我使用AbstractAction对象时,JButton myButton = new JButton(myButtonAction);我需要引用继承自AbstractAction的对象中的GUI对象.我应该只是在GUI中创建AbstractAction对象,然后将所有必要的GUI引用传递给AbstractAction对象,还是可以认为是坏样式?

为了使它更具体:

// AbstractAction
   public class MyAction extends AbstractAction {
        public  MyAction(String name, 
                            String description, Integer mnemonic, JLabel) {
            super(name);
            putValue(SHORT_DESCRIPTION, description);
            putValue(MNEMONIC_KEY, mnemonic);
        }
        public void actionPerformed(ActionEvent e) {

                // do something     
            }
        }
    }

public class GUI{
   public Action myAction = null;

   public GUI(){     
        JLabel label = new JLabel("text");
        //This is not a good idea:
         myAction = new MyAction("some text" , desc, new Integer(KeyEvent.VK_Q), label);

        JButton myButton = new JButton(myAction);
   }
}
Run Code Online (Sandbox Code Playgroud)

java swing jbutton abstract-action

6
推荐指数
2
解决办法
3946
查看次数

在下载过程中使用swingworker更新JProgressBar

问题已解决!!!!!! 非常感谢trashgod和HoverCraftFullOfEels!我终于通过使用下面的例子并略微改变它来获得这个概念.更改允许缩放进度条(默认为100个单位).再次感谢您的耐心和愿意为此而努力.意味着很多人,~Kyte

ps - + 1全部'围绕:)

/** @see http://stackoverflow.com/questions/4637215 */
public class Threading_01 extends JFrame {

private static final String s = "0.00";
private JProgressBar progressBar = new JProgressBar(0, 100);
private JLabel label = new JLabel(s, JLabel.CENTER);

public Threading_01() {
    this.setLayout(new GridLayout(0, 1));
    this.setTitle("?2");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.add(progressBar);
    this.add(label);
    this.setSize(161, 100);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
}

public void runCalc() {
//    progressBar.setIndeterminate(true);
    TwoWorker task = new TwoWorker();
    task.addPropertyChangeListener(new PropertyChangeListener() {

        @Override
        public void propertyChange(PropertyChangeEvent e) {
            if ("progress".equals(e.getPropertyName())) {
                progressBar.setIndeterminate(false);
                progressBar.setValue((Integer) e.getNewValue());
                System.out.println("**: " …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading swingworker jprogressbar

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

JDialog没有出现

该程序大多数工作正常,但不打开任何窗口.它应该在桌面右下方显示一个小对话框.但是对于另一个人来说,编译相同的代码没有问题.我们有相同的Java运行时(1.8_u40).我怎样才能解决这个问题?

我把代码放在下面:

import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.RoundRectangle2D;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class ProgressDialog {
    private JDialog dialogFrame;
    private JProgressBar progressBar;
    private JLabel headingLabel;
    private Uploader callerUploader;

    public ProgressDialog() {

        dialogFrame = new JDialog();
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
                | UnsupportedLookAndFeelException ex) {
            System.err.println(ex.toString());
        }

        dialogFrame.setSize(200, 50);
        dialogFrame.setLayout(new GridBagLayout());

        GridBagConstraints constraints = new GridBagConstraints(); …
Run Code Online (Sandbox Code Playgroud)

java swing awt jdialog java-8

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

SwingPropertyChangeSupport动态更新JTextArea

我正在尝试建立有关SwingPropertyChangeSupport的问题的答案

我试图在非常有用的Hovercraft Full Of Eels的答案中修改这里给出的代码: WindowListener不能按预期工作,以允许在通过输入对话框输入更改时更新显示的数组.

数组已更新,但未在GUI中刷新.我希望有人能告诉我哪里出错了.

这是代码:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.event.SwingPropertyChangeSupport;

public class Main {
public static void main(String[] arg) {
    GuiForUpdate display = new GuiForUpdate();
    display.setVisible(true);
}
}

class GuiForUpdate extends JFrame implements ActionListener {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private FocusListener focusListener;
private String mList;
private JButton changeArrayButton;
private JTextArea codeIn, …
Run Code Online (Sandbox Code Playgroud)

java arrays swing refresh

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

actionPerformed(ActionEvent e){

我正在使用不同的按钮构建一个grpahic界面,当用户单击按钮时,我使用:

actionPerformed(ActionEvent e) {
Object source = e.getSource();
if
else if
else if
...
}
Run Code Online (Sandbox Code Playgroud)

问题是当用户点击一个按钮时,actionPerformed(ActionEvent e)被调用,并且它输入if对应的e.getSource();.并执行相应if中的所有指令.但我想让用户点击不同的按钮成为可能,这样就actionPerformed(ActionEvent e)可以调用{,即使前一个指令actionPerformed(ActionEvent e){尚未完成.

我不知道你是否理解,但如果你能帮助我,谢谢!

java action awt actionevent

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