如何在按钮下的 JFrame 中创建一个计数器?
How do I make a counter in a JFrame under the buttons?
我正在尝试编写一个小程序只是为了好玩,我想要它,所以当我单击菠萝按钮时,它会在我想要的按钮下方的一串文本中添加一个菠萝,对于摇滚来说也是如此。所以基本上我需要一个用于岩石和菠萝的计数器,它位于按钮下方,每次按下摇滚按钮和菠萝按钮时都会计数。
这是我目前所拥有的。
public class BGUI extends JFrame{
private JButton pine;
private JButton rock;
public BGUI(){
super("Bikini Bottom Builder Game");
setLayout(new FlowLayout());
Icon p = new ImageIcon(getClass().getResource("b.png"));
pine = new JButton("Add Pineapple", p);
add(pine);
Icon r = new ImageIcon(getClass().getResource("b.png"));
rock = new JButton("Add Rock", r);
rock.setRolloverIcon(r);
add(rock);
Add handler = new Add();
pine.addActionListener(handler);
rock.addActionListener(handler);
}
private class Add implements ActionListener{
int pine = 0;
int rock = 0;
public void actionPerformed(ActionEvent event){
pine++;
rock++;
}
}
}
任何帮助将不胜感激!
您可以为此使用单个 GridBagLayout
或 GroupLayout
,但我会使用 combining layouts。
要在此处执行此操作,您可能有一个 'outer' 面板 BorderLayout
。将已有的带有 FlowLayout
的面板放入边框布局的 CENTER
中。使用流布局创建另一个新面板以放入 'bottom part'。将该面板添加到边框布局的 PAGE_END
。
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
public class BGUI extends JFrame {
private JButton pine;
private JButton rock;
private int pineappleCount = 0,
rockCount = 0;
public BGUI(){
super("Bikini Bottom Builder Game");
setLayout(new FlowLayout());
setSize(800, 800);
Icon p = new ImageIcon(getClass().getResource("b.png"));
pine = new JButton("Add Pineapple: " + pineappleCount, p);
pine.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
pine.setText("Add Pineapple: " + ++pineappleCount);
}
});
add(pine);
Icon r = new ImageIcon(getClass().getResource("b.png"));
rock = new JButton("Add Rock: " + rockCount, r);
rock.setRolloverIcon(r);
rock.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
rock.setText("Add Rock: " + ++rockCount);
}
});
add(rock);
super.setVisible(true);
}
public static void main(String[] a) {
new BGUI();
}
}
你的想法是对的。你只是错误地实施了你的听众。我继续为您的按钮添加了一个匿名内部 class 以实现您想要的计数效果。如果您希望计数器位于按钮下方,则需要将 JFrame 组件的布局更改为其他布局并使用 JLabel。
我正在尝试编写一个小程序只是为了好玩,我想要它,所以当我单击菠萝按钮时,它会在我想要的按钮下方的一串文本中添加一个菠萝,对于摇滚来说也是如此。所以基本上我需要一个用于岩石和菠萝的计数器,它位于按钮下方,每次按下摇滚按钮和菠萝按钮时都会计数。
这是我目前所拥有的。
public class BGUI extends JFrame{
private JButton pine;
private JButton rock;
public BGUI(){
super("Bikini Bottom Builder Game");
setLayout(new FlowLayout());
Icon p = new ImageIcon(getClass().getResource("b.png"));
pine = new JButton("Add Pineapple", p);
add(pine);
Icon r = new ImageIcon(getClass().getResource("b.png"));
rock = new JButton("Add Rock", r);
rock.setRolloverIcon(r);
add(rock);
Add handler = new Add();
pine.addActionListener(handler);
rock.addActionListener(handler);
}
private class Add implements ActionListener{
int pine = 0;
int rock = 0;
public void actionPerformed(ActionEvent event){
pine++;
rock++;
}
}
}
任何帮助将不胜感激!
您可以为此使用单个 GridBagLayout
或 GroupLayout
,但我会使用 combining layouts。
要在此处执行此操作,您可能有一个 'outer' 面板 BorderLayout
。将已有的带有 FlowLayout
的面板放入边框布局的 CENTER
中。使用流布局创建另一个新面板以放入 'bottom part'。将该面板添加到边框布局的 PAGE_END
。
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
public class BGUI extends JFrame {
private JButton pine;
private JButton rock;
private int pineappleCount = 0,
rockCount = 0;
public BGUI(){
super("Bikini Bottom Builder Game");
setLayout(new FlowLayout());
setSize(800, 800);
Icon p = new ImageIcon(getClass().getResource("b.png"));
pine = new JButton("Add Pineapple: " + pineappleCount, p);
pine.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
pine.setText("Add Pineapple: " + ++pineappleCount);
}
});
add(pine);
Icon r = new ImageIcon(getClass().getResource("b.png"));
rock = new JButton("Add Rock: " + rockCount, r);
rock.setRolloverIcon(r);
rock.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
rock.setText("Add Rock: " + ++rockCount);
}
});
add(rock);
super.setVisible(true);
}
public static void main(String[] a) {
new BGUI();
}
}
你的想法是对的。你只是错误地实施了你的听众。我继续为您的按钮添加了一个匿名内部 class 以实现您想要的计数效果。如果您希望计数器位于按钮下方,则需要将 JFrame 组件的布局更改为其他布局并使用 JLabel。