Java JButton不采取行动';当preferredSize为非默认值时的名称
我刚刚注意到,Java JButton不采取行动';当preferredSize为非默认值时的名称,java,swing,netbeans,action,jbutton,Java,Swing,Netbeans,Action,Jbutton,我刚刚注意到,JButton不会将其文本更改为耦合的操作对象的名称值,至少以下两个条件为真: 按钮的preferredSize属性不是默认值 按钮的text属性不是默认的“”(空) 可能还有其他属性值的组合使按钮忽略操作的名称,但是当我将其中一个设置为默认值时,它会工作 我将陈述一个明显的事实,即操作是正确注册的,而hideActionText属性是false。此外,我应该说我通过Netbeans GUI设计器中的properties面板设置了这些属性 几次谷歌搜索什么也没找到。这是正常行为
JButton
不会将其文本更改为耦合的操作
对象的名称
值,至少以下两个条件为真:
- 按钮的
属性不是默认值preferredSize
- 按钮的
属性不是默认的“”(空)text
hideActionText
属性是false。此外,我应该说我通过Netbeans GUI设计器中的properties面板设置了这些属性
几次谷歌搜索什么也没找到。这是正常行为吗?可以解决吗?我想说两件事:
如果我设置了文本,但没有设置首选大小,我仍然可以看到按钮文本(即使文本太小太合适,也会在文本上显示“…”。在此SSCCE上亲自测试:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.io.IOException;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame();
frame.setTitle("frame");
final JButton button = new JButton(new AbstractAction("Action text") {
@Override
public void actionPerformed(ActionEvent e) {
System.err.println("Hello");
}
});
button.setText("Button text which is a lot longer");
button.setPreferredSize(new Dimension(100, 30));
frame.add(button);
frame.pack();
frame.setVisible(true);
}
}
我想说两件事:
如果我设置了文本,但没有设置首选大小,我仍然可以看到按钮文本(即使文本太小太合适,也会在文本上显示“…”。在此SSCCE上亲自测试:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.io.IOException;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame();
frame.setTitle("frame");
final JButton button = new JButton(new AbstractAction("Action text") {
@Override
public void actionPerformed(ActionEvent e) {
System.err.println("Hello");
}
});
button.setText("Button text which is a lot longer");
button.setPreferredSize(new Dimension(100, 30));
frame.add(button);
frame.pack();
frame.setVisible(true);
}
}
preferredSize的原因纯粹是为了美观和用户体验,例如,我希望它能吸引更多用户的注意力/使其更加突出。文本的原因是按钮在GUI设计器中仍然有意义。我承认有一些简单的解决办法,但它们一开始就不是必需的…@MarioDeSchaepmeester你认为应该有什么不同?我同意这是预期的行为。你是说你想为按钮指定一个名称,但仍然让它覆盖名称并显示操作?好的,我知道你想设置一个文本(在GUI desogner中预览),但你不应该这样做。GUI设计者应该提供一种输入示例值的方法,该值仅用于显示按钮可能包含的内容。对于你的问题,我看不到任何其他的“变通方法”。@YoussefG。这就是我要说的,如果我不更改preferredSize,它就会起作用。@GuillaumePolet Netbeans没有提供我所知道的那种功能。正如我所说的,单独设置文本是可行的。我不明白为什么以及如何使用
preferredSize
属性来影响按钮是否接受操作文本。似乎是java API中的一个缺陷。。。当然,如果只是因为这样,操作文本可能不适合按钮。但这是程序员的责任。preferredSize的原因纯粹是为了美观和用户体验,例如,我希望它能吸引更多用户的注意力/使其更加突出。文本的原因是按钮在GUI设计器中仍然有意义。我承认有一些简单的解决办法,但它们一开始就不是必需的…@MarioDeSchaepmeester你认为应该有什么不同?我同意这是预期的行为。你是说你想为按钮指定一个名称,但仍然让它覆盖名称并显示操作?好的,我知道你想设置一个文本(在GUI desogner中预览),但你不应该这样做。GUI设计者应该提供一种输入示例值的方法,该值仅用于显示按钮可能包含的内容。对于你的问题,我看不到任何其他的“变通方法”。@YoussefG。这就是我要说的,如果我不更改preferredSize,它就会起作用。@GuillaumePolet Netbeans没有提供我所知道的那种功能。正如我所说的,单独设置文本是可行的。我不明白为什么以及如何使用preferredSize
属性来影响按钮是否接受操作文本。似乎是java API中的一个缺陷。。。当然,如果只是因为这样,操作文本可能不适合按钮。但这是程序员的责任。另请参见。@trashgood好吧,谢谢,现在我知道我应该尽可能避免使用首选尺寸。我使用系统L&F,所以我不能使用SizeVariant…另请参见。@Trashgood好的,谢谢,现在我知道我应该尽可能避免使用首选尺寸。我使用系统L&F,所以我不能使用SizeVariant。。。