所以我的GUI有一小段代码:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.BoxLayout;
import javax.swing.JSeparator;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class IPGUI extends JFrame implements ActionListener
{
private static JPanel contentPane;
private static boolean btn1Clicked = false;
private static boolean btn2Clicked = false;
private static boolean btn3Clicked = false;
private static boolean btn4Clicked = false;
//Create the frame
public IPGUI()
{
//Sets frame properties
setTitle("IP Extractor");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 250, 300);
contentPane = new JPanel();
contentPane.setBorder(new …Run Code Online (Sandbox Code Playgroud) 我正在使用Mac上的Eclipse设计GUI,我想让我JButton只显示我设置的Icon.它在Mac OS上看起来很好,但是当我将它导出到jar文件并在Windows操作系统上运行时,JButton看起来像这样:

边界都是EmptyBorder.
我做错了什么?怎么能让后面的广场消失?
我正在寻找一种方法将变量或字符串或任何东西传递给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是一个全局变量,但我讨厌这样做的方式.还有更好的选择吗?
我想在 JComboBox 中放置一个 JButton。此按钮允许用户浏览文件。用户选择的文件被添加到 JComboBox 列表中。我该怎么做呢?我使用某种渲染器吗?谢谢你。
编辑: 在阅读有关 ListCellRenderer 的更多信息后,我尝试了以下代码:
JComboBox comboBox = new JComboBox(new String[]{"", "Item1", "Item2"});
ComboBoxRenderer renderer = new ComboBoxRenderer();
comboBox.setRenderer(renderer);
class ComboBoxRenderer implements ListCellRenderer {
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
JButton jbutton = new JButton("Browse");
return jbutton;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的问题是按钮“浏览”将被添加 3 次,我希望它只显示一次并在它下方显示 Item1 和 Item2 作为普通/常规组合框选择对象。
我正在尝试制作一个由9x9 JButton制作的简单的tic tac toe board.我使用了二维数组和一个gridlayout,但结果是什么,没有任何按钮的框架.我做错了什么?
import java.awt.GridLayout;
import javax.swing.*;
public class Main extends JFrame
{
private JPanel panel;
private JButton[][]buttons;
private final int SIZE = 9;
private GridLayout experimentLayout;
public Main()
{
super("Tic Tac Toe");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,500);
setResizable(false);
setLocationRelativeTo(null);
experimentLayout = new GridLayout(SIZE,SIZE);
panel = new JPanel();
panel.setLayout(experimentLayout);
buttons = new JButton[SIZE][SIZE];
addButtons();
add(panel);
setVisible(true);
}
public void addButtons()
{
for(int k=0;k<SIZE;k++)
for(int j=0;j<SIZE;j++)
{
buttons[k][j] = new JButton(k+1+", "+(j+1));
experimentLayout.addLayoutComponent("testName", buttons[k][j]);
}
}
public static void main(String[] args)
{ …Run Code Online (Sandbox Code Playgroud) 这是我想要做的.我已经扩展了JButton并覆盖了paintComponent方法,创建了我想要的圆形边缘按钮效果,以及当按钮被鼠标滚动时的颜色褪色效果.一切都很好.我的问题是JButton仍在绘制一个白色矩形区域,如图所示.

我想1)白色的角落消失了,2)按钮的cetner显示它背后的面板.这是我尝试过的:
1-绘制按钮时使用getParent().getBackground()并首先绘制按钮.这适用于不透明面板.不过我希望这个按钮可以在部分或完全透明的面板上工作.使用透明面板绘制颜色,但在白色背景上隐藏面板后面的任何内容(如图像).
2-我尝试了很多setOpaque(false)或setContentAreaFilled(false)的组合.我在调用super.paintComponent(g)时没有调用它.这些似乎都不起作用.
3-按钮向右看时,我不使用方法g2.clearRect(0,0,宽,高)(画前清除图形区域),但由于图形对象不会被掩盖了淡入淡出效果后停止工作一个按钮翻转.
4-我使用JLabel作为文本,并尝试将其设置为不透明或只是不使用它,问题仍然存在.所以我认为这不是问题.
因为我只想要对JButton产生影响而不是其他摆动组件,所以我真的希望避免制作我自己的ButtonUI.
谢谢,我希望这是有道理的.下面是我的按钮的代码.
import javax.swing.*;
import javax.swing.Timer;
import java.awt.*;
import java.awt.event.*;
/**
* WButton.java
*
* An extension of JButton but with custom graphics
*
*/
public class WButton extends JButton{
private Timer timer;
private float[] background = {.3f,.6f,.8f,0f};
private boolean fadeUp = true;
private boolean fadeDown = false;
private JLabel label;
/**
* Default Constructor
*/
public WButton(){
super();
label = new JLabel();
setupButton();
}
/**
* Text constructor
*/
public WButton(String text){
super(text); …Run Code Online (Sandbox Code Playgroud) 我在尝试将 JButton 添加到带有字符串的 JTextPane 时遇到问题。所以我想要做的是在 for 循环中添加每个字符串,然后在添加的字符串之后添加广告 JButton。下面的代码是我想要完成的。
ArrayLst<String> data = new ArrayList();
data.add("Data here");
data.add("Data here 2");
data.add("Data here 3");
data.add("Data here 4");
Container cp = getContentPane();
JTextPane pane = new JTextPane();
SimpleAttributeSet set = new SimpleAttributeSet();
StyleConstants.setBold(set, true);
pane.setBackground(Color.BLUE);
pane.setEditable(false);
Document doc = pane.getStyledDocument();
for(int i=0; i<data.size(); i++)
{
doc.insertString(doc.getLength(), data.get(i)+ "\n", set);
pane.insertComponent(new JButton("View Info"));
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何将 JButton 添加到同一行上的每个字符串?
非常感谢
我有一个imageIcon作为Button,现在我会在翻转时为其设置动画.我试图在setRolloverIcon(Icon)上使用动画gif(没有循环).但当我再次悬停在按钮上时,gif不再播放了.当我使用循环gif然后它从随机帧播放它.我尝试使用paintComponent将Shape或图像绘制为Button,它工作正常,但即使我使用setPreferredSize()或setSize()或setMaximumSize(),Button也会使用其默认大小,如图所示(中间)按钮).我使用GroupLayout,这可能是问题吗?

我正在尝试动态添加按钮(JButtons),它每次都会更改名称.我用for循环做它并没有真正的问题.但是当添加一个动作监听器或识别哪个按钮被按下时,那就是当事情不能很好地工作时.
MyFrame.java
import javax.swing.*;
import java.awt.event.*;
import java.awt.GridLayout;
public class MyFrame extends JFrame implements ActionListener
{
private JPanel panel;
private static JButton[] buttons = new JButton[18];
// set all static calculate JButtons
private static JButton equalsBtn, addBtn, subBtn, multiBtn, divBtn, clearBtn, plusMinusBtn, decimalBtn;
// set all static number JBtuttons
private static JButton zeroBtn, oneBtn, twoBtn, threeBtn, fourBtn, fiveBtn, sixBtn, sevenBtn, eightBtn, nineBtn;
private static JTextField resultField;
// numOne is the first row of figures en the second numSecond is the …Run Code Online (Sandbox Code Playgroud) 所以,我正在使用 Swing 库开发一个程序,我显然有按钮和菜单项。其中一些应该做同样的事情,我认为使用命令模式应该是这样做的方式,例如我有一个“保存”按钮和一个“保存”菜单项,他们必须实现相同的保存算法. 命令模式似乎没问题,但我不知道谁是接收者。难道一个命令不应该在一个实现某种“接收器接口”的对象上工作,这样你就可以在不同的接收器上使用不同的命令来任意耦合它们吗?看起来我的模式实现中没有“接收器”。我的另一个疑问是是否应该将命令实现为单例,
谢谢你。
jbutton ×10
java ×9
swing ×9
imageicon ×2
jpanel ×2
animated-gif ×1
arraylist ×1
grid-layout ×1
jcombobox ×1
jmenuitem ×1
jtextpane ×1
render ×1
transparency ×1