我想让JButton保持按下状态,并且在某些事件发生之前无法再次按下是否有一种简单的方法可以做到这一点?
首先-很抱歉,没有代码太可怕,只是我要解释的框架。它运行没有错误。
目标
我正在为GUI创建可重用的按钮类,并且每个按钮对象在单击时都需要具有不同的处理程序。我想为ClickHandler每个新按钮分配一个对象。然后,该按钮将调用init()处理程序,并继续执行。不幸的是,这存在输入问题,因为每个处理程序类都有不同的名称。
目前的进展
现在,该处理程序的类型为HandlerA,但我希望它处理任何名称,例如“ SettingsHandler”或“ GoToTheWahWah”等。
我尝试过弄乱泛型,但是由于我是新手,从Webdev的背景开始,我似乎一直在克服概念上的障碍。这是解决问题的正确方法吗?
代码
ReuseableButton.java 是可重用的类,唯一改变的是单击时的操作:
package gui;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class ReuseableButton extends JButton implements ActionListener {
private static final long serialVersionUID = 1L;
// I want a generic type here, not just HandlerA!
private HandlerA ClickHandler;
// Assemble generic button
public ReuseableButton(Container c, String s) {
super(s);
addActionListener(this);
c.add(this);
}
// Once again, generic type, not just HandlerA!
public void SetClickHandler(HandlerA ch) { …Run Code Online (Sandbox Code Playgroud) 我试图使用java Web服务进行简单的添加.我有一个问题从JTextField我的ints 输入,以便程序可以执行添加.我的代码如下.当用户输入第一个值时,他们应该点击第一个按钮(butta)与第二个按钮相同,一旦点击第二个按钮,它应该显示结果的某个位置.单击按钮时,整数解析似乎不起作用.
public class Wscalcclient {
static int aa=0, bb=0, cc=0;
String str = new String();
JTextField fielda, fieldb;
JTextField fieldc;
Wscalcclient()
{ JButton butta, buttb;
JLabel result;
JPanel panel;
JFrame frame = new JFrame();
frame.setBackground(Color.white);
frame.setForeground(Color.black);
frame.setSize(500,250);
panel = new JPanel();
panel.setBackground(Color.cyan);
panel.setForeground(Color.black);
panel.setLayout(new GridLayout(0,2));
butta = new JButton("enter number a");
buttb = new JButton("enter number b");
result = new JLabel("result a+b=");
fielda = new JTextField();
fieldb = new JTextField();
fieldc = …Run Code Online (Sandbox Code Playgroud) 我是Java新手.我正在尝试移动JButton当前居中的位置,因此我将位置更改为静态位置并且它没有移动.任何的想法?
public Main(BufferedImage image) {
this.image = image;
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw image centered.
int x = (getWidth() - image.getWidth())/2;
int y = 0;//(getHeight() - image.getHeight())/2;
g.drawImage(image, x, y, this);
}
public static void main(String[] args) throws IOException {
String path = "img/visualizerLogo3.jpg";
BufferedImage image = ImageIO.read(new File(path));
Main contentPane = new Main(image);
contentPane.setOpaque(true);
contentPane.setLayout(new GridBagLayout());
JButton submit = new JButton("Load File");
submit.setLocation(600, 800);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(contentPane);
f.setSize(1200,1000);
//f.setLocation(200,200); …Run Code Online (Sandbox Code Playgroud) 我有一个类扩展JButton,我试图应用.png图像.图像形状不规则,并被透明像素包围.我已经覆盖了paintComponent()方法,在JButton我的缓冲图像应用到按钮.现在,图像是唯一被绘制的东西,这就是我想要的.
但是,按钮仍然会检测周围矩形中的事件.有没有办法将检测限制在仅包含不透明像素的区域(或者更确切地说不检测透明像素上的事件)?
按钮类的代码如下.
public class DrawButton extends JButton{
private BufferedImage bi;
public DrawButton(BufferedImage bi){
setPreferredSize(new Dimension(bi.getWidth(), bi.getHeight()));
this.bi = bi;
}
@Override
protected void paintComponent(Graphics g){
g.drawImage(bi, 0, 0, null);
g.dispose();
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个3*6阵列的JButtons内部GridBagLayout.但由于每个按钮的文本长度可能不同,因此每列按钮的宽度略有不同.如何让它们具有相同的宽度?
这是代码:
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 6; j++)
{
buttonConstraints.fill = GridBagConstraints.BOTH;
buttonConstraints.weightx = 1;
buttonConstraints.weighty = 1;
buttonConstraints.gridx = j;
buttonConstraints.gridy = i;
buttonPanel.add(buttons[i * 6 + j], buttonConstraints);
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我有一个带有JButtons GridLayout的JPanel.此面板中发生了许多操作,其中按钮被启用和禁用几次.现在我正在创建一些JUnit测试,最后需要检查所有JButton是否被禁用.
有没有一个方法,它允许我从GridLayout返回一个JButton集合或从某个位置返回至少一个JButton,以便我可以循环它?
我正在创建一个雷区游戏.我需要在网格下面的单独的JPanel中添加两个按钮,Clear和Done,并且无法弄清楚如何.下面是游戏网格的代码.谢谢!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MineField extends JPanel implements ActionListener{
public static void main(String[] args) {
MineField g = new MineField();
JFrame frame = new JFrame("Mine Field");
frame.add(g);
frame.setSize(400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private JButton squares[][];
public MineField(){
this.setSize(400,400);
this.setLayout(new GridLayout(5,5));
squares = new JButton[5][5];
buildButtons();
}
int [][] num = new int [5][5];
private void buildButtons(){
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
squares[i][j] = new JButton();
squares[i][j].setSize(400,400);
this.add(squares[i][j]);
}
}
}
public …Run Code Online (Sandbox Code Playgroud) for(gbc.gridy = 3; gbc.gridy > 0; gbc.gridy--)
for(gbc.gridx = 0; gbc.gridx < 3;gbc.gridx++)
{
grid[btnNum] = new JButton("" + (btnNum+1));
grid[btnNum].setPreferredSize(new Dimension(75,75));
frame.add(grid[btnNum], gbc);
grid[btnNum].addActionListener(this);
grid[btnNum].addKeyListener(this);
btnNum++;
}
Run Code Online (Sandbox Code Playgroud)
我有一个按钮阵列显示在3x3网格中,每个按钮都有一个动作监听器.
public void actionPerformed(ActionEvent e){
String output = "";
if(e.getSource() == grid[0]){
System.out.println("button 1");
}
}
Run Code Online (Sandbox Code Playgroud)
这不正确吗?
上下文中的完整示例:
public class ButtonGrid implements ActionListener, KeyListener{
JFrame frame=new JFrame(); //creates frame
JButton[] grid; //names the grid of buttons
public ButtonGrid(){ //constructor
frame.setTitle("MPC");
frame.setLayout(new GridBagLayout()); //set layout
JButton[] grid=new JButton[12]; //allocate the size of grid …Run Code Online (Sandbox Code Playgroud) 我正忙着为Java Swing应用程序编写一个按钮菜单,我想知道是否可以删除JButton添加到JPanel的s 之间的填充.
该JPanel使用FlowLayout是左对齐.
JPanel panelMenu = new JPanel(new FlowLayout(FlowLayout.LEFT));
Run Code Online (Sandbox Code Playgroud)
按钮是标准JButton的
JButton buttOne = new JButton("One");
JButton buttTwo = new JButton("Two");
Run Code Online (Sandbox Code Playgroud)
我正常地将JButtons添加到面板中
add(panelMenu, BorderLayout.NORTH);
panelMenu.add(buttOne);
panelMenu.add(buttTwo);
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作,但我需要做什么来删除按钮之间的默认间距?
我在网上找到了一个建议的解决方案,如下所示
buttOne.setBorder(null);
buttOne.setBorderPainted(false);
buttOne.setMargin(new Insets(0,0,0,0));
buttTwo.setBorder(null);
buttTwo.setBorderPainted(false);
buttTwo.setMargin(new Insets(0,0,0,0));
Run Code Online (Sandbox Code Playgroud)
然而,这似乎消除了按钮内部的间距而不是每个按钮之间的间距.
这个间距是由FlowLayout?如果是这样,我该如何删除它?
java ×10
jbutton ×10
swing ×9
jframe ×2
jpanel ×2
extend ×1
flowlayout ×1
grid-layout ×1
jcomponent ×1
parseint ×1
spacing ×1