我试图nameField在点击Label被叫label1后使输入出现在Button被叫button1中.现在它说:'txt',我理解为什么.但我不知道如何使用字符串!谁能解释一下我做错了什么以及如何正确使用这个字符串?
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class thisismytest2 {
public static void main(String[] args) {
final JFrame frame = new JFrame();
JPanel panel = new JPanel();
JTextField nameField = new JTextField("...", 2);
JButton button1 = new JButton();
final JLabel label1 = new JLabel();
label1.setText("txt");
label1.setVisible(false);
String txt = nameField.getText();
frame.add(panel);
panel.add(button1);
panel.add(label1);
frame.setSize(200,200);
frame.setVisible(true);
panel.add(nameField);
frame.setSize(600,400);
nameField.setBounds(400, 40, …Run Code Online (Sandbox Code Playgroud) 我试图在JButton上放一行两行文字; 例如
+----------+
| READER |
| STOP |
+----------+
Run Code Online (Sandbox Code Playgroud)
但是我无法将它集中在按钮上.我去属性编辑器对JButton,并输入<html><center>READER<br>STOP了文本属性.这导致两个单词相对于彼此居中,但是它们一起看起来仍然朝向按钮面的右侧移动,如:
+----------+
| READER|
| STOP |
+----------+
Run Code Online (Sandbox Code Playgroud)
还有水平和垂直对齐和文本位置属性,我将它们全部设置为CENTER,但这没有任何我能看到的效果.
编辑:这里是一个例子,说明当我<center>完全省略时它是如何布局的,以防任何人对我的描述感到困惑"读者和停止是相互尊重的左对齐,但在按钮上右对齐":
+----------+
| READER|
| STOP |
+----------+
Run Code Online (Sandbox Code Playgroud)
编辑:这是NetBeans生成的代码:
readerStopButton_.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.light"));
readerStopButton_.setFont(new java.awt.Font("Geneva", 0, 12)); // NOI18N
readerStopButton_.setText("<html><center>READER<br>STOP</center></html>\n");
readerStopButton_.setToolTipText("<html><b>Stop</b> button is currently inactive. ");
readerStopButton_.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
readerStopButton_.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
readerStopButton_ActionPerformed(evt);
}
});
operationButtons_.add(readerStopButton_);
Run Code Online (Sandbox Code Playgroud)
编辑:这是按钮对我的看法的屏幕截图.有很多我不知道做布局,所以我很可能省略一些关键信息.但基本上我让NetBeans完成所有工作,除了提供HTML文本.
编辑:打开一个显示所有按钮的替换屏幕截图.请注意,不使用HTML的单词(单字单词)正确对齐,而使用HTML的两个正在搞乱.

我在互联网上搜索过但无法找到答案:
我正在使用for循环来创建名为a1,a2等的36个按钮,并同时为每个按钮分配一个唯一的Action Command.
后来我想从actionPerformed(ActionEvent e)方法中获取按钮的名称.
我可以让ActionCommand足够简单,但我也需要按钮的名称.
任何帮助非常感谢!
编辑:
这是我正在使用的代码:
String letters[] = {"0", "a", "b", "c", "d", "e", "f"};
JButton btn[] = new JButton[35];
int count = 0;
for (int f=1; f < 7;f++){
for (int i=1; i < 7;i++){
btn[i] = new JButton(letters[f]+i, cup);
System.out.println(btn[i]));
mainGameWindow.add(btn[i]);
btn[i].addActionListener(this);
String StringCommand = Integer.toString(randomArrayNum());
btn[i].setActionCommand(StringCommand);
count++;
if(count == 18){
generateArray();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这为6x6网格提供了36个按钮,分别为a1-6,b1-6,c1-6等
一旦我以这种方式创建按钮,我似乎无法控制按钮,我无法分配图标或获取按钮的名称.
提前致谢.
这将是一个真正的理论问题,请跟我一点.我需要用我的JButton做一些事情,我不知道从哪里开始.
所以我需要的是能够点击一个JButton,并有一个视觉证明它被选中,例如红色边框或白色背景或其他东西.而且我希望它保持这样,直到以相同的方式选择另一个JButton.现在,当我点击一个Jbutton时,会有一个简短的视觉显示点击它,但我不能让它持续更长时间.
我尝试使用ChangeListeners,但没有结果.
所以我的问题基本上是:你建议我尝试什么样的方法?
1 - 返回ChangeListener,它是唯一的选项2 - JButton有另一个选项可以做到这一点
对不起,如果它太模糊了,但我发现的其他一切都是超级具体的,并没有回答我的问题.
我需要程序 - 主JFrame有2个按钮
当我单击按钮时,它必须打开带有新选项的新JFrame窗口,而如果我单击button2然后打开另一个窗口.
在这两个新窗口中,我必须添加下一个和上一个的按钮.
我有一个问题,当我打开按钮1,然后打开2个窗口,主JFrame仍然可见.
我的第一个摇摆计划:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class example {
public static void main (String[] args){
JFrame frame = new JFrame("Test");
frame.setVisible(true);
frame.setSize(500,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.add(panel);
JButton button = new JButton("hello agin1");
panel.add(button);
button.addActionListener (new Action1());
JButton button2 = new JButton("hello agin2");
panel.add(button2);
button.addActionListener (new Action2());
}
static class Action1 implements ActionListener {
public void actionPerformed (ActionEvent e) {
JFrame frame2 = new …Run Code Online (Sandbox Code Playgroud) 我用Java创建了一个简单的菜单,但我无法弄清楚如何更改按钮的大小.我的菜单看起来像这样:

我希望最后一个按钮与其他按钮一样大小.
tlacTisk.setSize(10,10);
tlacTisk.setPreferredSize(10,10);
Run Code Online (Sandbox Code Playgroud)
不起作用.
代码,我创建按钮和框:
JButton tlacSVG = new JButton();
tlacSVG.setText("Export do SVG");
tlacSVG.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
exportujSVG();
}
});
JButton tlacPNG = new JButton();
tlacPNG.setText("Export do PNG");
tlacPNG.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
exportujPNG();
}
});
JButton tlacTisk = new JButton();
tlacTisk.setText("Tisk...");
tlacTisk.setPreferredSize(new Dimension(50, 25));
tlacTisk.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
tiskni();
}
});
Box boxTlacitek = Box.createVerticalBox();
boxTlacitek.add(Box.createVerticalStrut(5));
boxTlacitek.add(tlacSVG);
boxTlacitek.add(Box.createVerticalStrut(10));
boxTlacitek.add(tlacPNG);
boxTlacitek.add(Box.createVerticalStrut(10));
boxTlacitek.add(tlacTisk);
boxTlacitek.setBorder(BorderFactory.createTitledBorder("Menu"));
okno.add(boxTlacitek, BorderLayout.EAST); …Run Code Online (Sandbox Code Playgroud) 通常需要根据另一个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) 我想为我的自定义Swing.JButton添加一个悬停效果,类似于Chrome浏览器上的图标:
在悬停之前>>

悬停后>>

我可以在创建按钮时将其设置为"之前"状态,但是当它悬停时我无法创建"边框+凸起背景".当我尝试将边框重新添加到按钮时,我在插入重新绘制新边框后获得了移动效果.
这是我目前的代码:
public class MyButton extends JButton implements MouseListener {
public MyButton(String iconPath, String toolTip) {
super(new ImageIcon(TipButton.class.getResource(iconPath)));
addMouseListener(this);
setBorder(null);
setBorderPainted(false);
setFocusPainted(false);
setOpaque(false);
setContentAreaFilled(false);
setToolTipText(toolTip);
}
public MyButton(String iconPath, String name, String toolTip) {
this(observers, iconPath, toolTip);
setText(name);
}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {
if (e.getSource() != this) return;
setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
}
@Override
public void mouseExited(MouseEvent e) {
if …Run Code Online (Sandbox Code Playgroud) 我正在使用Nimbus Look and Feel开发应用程序.有一个表和一列包含按钮(使用Rob Camick的表按钮列).这确实有效,但结果并不像我预期的那样.我试图修复外观,但无济于事.
所以问题是:如何更改Nimbus按钮的"背景"(圆角矩形以外的区域)?最好以非hacky方式:-)
使用默认的表列按钮,结果如下所示:

正如您所看到的,背景(并且我的意思是按钮圆角矩形之外的区域)对于奇数(白色)行是错误的.产生此输出的代码是:
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
if (isSelected) {
renderButton.setForeground(table.getSelectionForeground());
renderButton.setBackground(table.getSelectionBackground());
} else {
renderButton.setForeground(table.getForeground());
renderButton.setBackground(table.getBackground());
}
if (hasFocus) {
renderButton.setBorder( focusBorder );
} else {
renderButton.setBorder( originalBorder );
}
// <snip some code>
renderButton.setOpaque(true);
return renderButton;
}
Run Code Online (Sandbox Code Playgroud)
这renderButton是默认的实例JButton.我已经尝试弄乱按钮的背景颜色了,但这并没有像我预期的那样有效:
Color alternate = (Color)LookAndFeel.getDesktopPropertyValue("Table.alternateRowColor", Color.lightGray);
Color normal = (Color)LookAndFeel.getDesktopPropertyValue("Table.background", Color.white);
if (row % …Run Code Online (Sandbox Code Playgroud) 我不敢相信这不起作用.
我有一个JList.我已将其渲染器设置如下.基本上RankingPanel是一个带有两个标签和一个按钮的JPanel.
topAchieverList = new JList();
topAchieverList.setCellRenderer(new TopBottomCellRenderer());
Run Code Online (Sandbox Code Playgroud)
这是我的TopBottomCellRenderer.
class TopBottomCellRenderer extends RankingPanel implements ListCellRenderer {
public TopBottomCellRenderer() {
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
try {
Achievers achiever = (Achievers) value;
if (achiever == null) {
return this;
}
itemRank.setText("#" + achiever.rank);
itemUnits.setText("" + achiever.units);
//this is the button that does not click
itemNameButton.setText(achiever.name);
//set bg
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
return this; …Run Code Online (Sandbox Code Playgroud)