Java 创建jbutton的行和列
我的任务是创建3组座椅,每组有3行10列座椅。首先,我为三套座椅分别创建了一个座椅,现在我正尝试使用布局管理器以3x10样式显示座椅(即Java 创建jbutton的行和列,java,swing,button,layout-manager,Java,Swing,Button,Layout Manager,我的任务是创建3组座椅,每组有3行10列座椅。首先,我为三套座椅分别创建了一个座椅,现在我正尝试使用布局管理器以3x10样式显示座椅(即JButtons)。以下是我的代码: public class ConcertPanel extends JPanel { private JPanel Panel1; private JButton goldSeat; private JButton silverSeat; private JButton bronzeSeat;
JButtons
)。以下是我的代码:
public class ConcertPanel extends JPanel
{
private JPanel Panel1;
private JButton goldSeat;
private JButton silverSeat;
private JButton bronzeSeat;
ConcertPanel()
{
Panel1 = new JPanel();
Panel1.setSize(500,500);
setLayout(new GridLayout(rows, cols));
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
{
goldSeat = new JButton();
silverSeat = new JButton();
bronzeSeat = new JButton();
add(new JButton());
}
this.add(Panel1);
}
}
公共类ConcertPanel扩展了JPanel
{
私人JPanel小组1;
二等兵吉布顿金席;
私人朱布顿银座;
私人杰布顿青铜色座椅;
专家小组()
{
Panel1=新的JPanel();
面板1.设置尺寸(500500);
setLayout(新网格布局(行、列));
对于(int i=0;i
现在我在jpanel中只得到了30个按钮,它们不在行或列中?帮助:(请再次查看:
- 您希望将GridLayout设置为容器一次
- 使用GridLayout添加组件时,添加组件(JButton)时没有第二个参数
- 如果布局应为3 x 10,则需要将30个组件添加到此容器中
- 您正在使用JPanel将另一个JPanel panel1添加到GridLayout,它将成为网格的一部分。您似乎不想这样做
导入java.awt.GridLayout;
导入javax.swing.*;
公共类GridLayoutEg扩展了JPanel{
私有静态最终整数行=3;
专用静态最终整数COLS=10;
公共网格布局EG(){
setLayout(新的GridLayout(行、列));//设置JPanel的布局
对于(int i=0;icreateAndShowGui());
}
私有静态void createAndShowGui(){
GridLayoutEg主面板=新建GridLayoutEg();
JFrame=新JFrame(“GridLayoutEg”);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
添加框架(主面板);
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
}
编辑 有关此代码的问题,请参见注释:
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++) {
goldSeat = new JButton(); // button created but never added
silverSeat = new JButton(); // button created but never added
bronzeSeat = new JButton(); // button created but never added
add(new JButton()); // only button added
}
this.add(Panel1); // this throws off the whole GridLayout since it's added to the grid
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
public class GridLayoutEg extends JPanel {
private static final long serialVersionUID = 1L;
private static final int ROWS = 3;
private static final int COLS = 10;
public GridLayoutEg() {
int gap = 1;
int gap2 = 2;
setBorder(BorderFactory.createEmptyBorder(gap2, gap2, gap2, gap2));
setLayout(new GridLayout(ROWS, COLS, gap, gap)); // set JPanel's layout
for (int row = 0; row < ROWS; row++) {
for (int col = 0; col < COLS; col++) {
JButton button = createSeat(row, col);
add(button); // add component w/o a 2nd parameter
}
}
}
private JButton createSeat(int row, int col) {
SeatColor seatColor = SeatColor.values()[row];
SeatAction seatAction = new SeatAction(seatColor, col);
JButton button = new JButton(seatAction);
button.setBackground(seatColor.getColor());
int topGap = 8;
int sideGap = 25;
Border innerBorder = BorderFactory.createEmptyBorder(topGap, sideGap, topGap, sideGap);
Border outerBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED, seatColor.getColor().brighter(),
seatColor.getColor().darker());
Border border = BorderFactory.createCompoundBorder(outerBorder, innerBorder);
button.setBorder(border);
return button;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
private static void createAndShowGui() {
GridLayoutEg mainPanel = new GridLayoutEg();
JFrame frame = new JFrame("GridLayoutEg");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}
class SeatAction extends AbstractAction {
private static final long serialVersionUID = 1L;
private SeatColor seatColor;
private int column;
public SeatAction(SeatColor seatColor, int column) {
super(String.format("[%d]", column));
this.seatColor = seatColor;
this.column = column;
// putValue(LARGE_ICON_KEY, createIcon(seatColor, column));
}
@Override
public void actionPerformed(ActionEvent e) {
AbstractButton btn = (AbstractButton) e.getSource();
btn.setBackground(seatColor.getColor().brighter());
setEnabled(false);
String text = String.format("Selected Seat Color: %s; Column: %d", seatColor, column);
System.out.println(text );
}
}
enum SeatColor {
GOLD("Gold", new Color(255, 215, 0)),
SILVER("Silver", new Color(192, 192, 192)),
BRONZE("Bronze", new Color(205, 127, 50));
private String text;
private Color color;
private SeatColor(String text, Color color) {
this.text = text;
this.color = color;
}
public String getText() {
return text;
}
public Color getColor() {
return color;
}
@Override
public String toString() {
return getText();
}
}
for(int i=0;i
因此,在我们的嵌套for循环中,您创建了3个JButton,但由于它们从未添加到GUI中,因此它们没有任何用途,实际上将被垃圾收集,除了最后创建的3个。然后您创建一个按钮并添加它。最后您创建了一个JPanel,但使用JPanel将其添加到GridLayout中,这将丢弃网格
使用此代码获得更多乐趣:
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++) {
goldSeat = new JButton(); // button created but never added
silverSeat = new JButton(); // button created but never added
bronzeSeat = new JButton(); // button created but never added
add(new JButton()); // only button added
}
this.add(Panel1); // this throws off the whole GridLayout since it's added to the grid
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
public class GridLayoutEg extends JPanel {
private static final long serialVersionUID = 1L;
private static final int ROWS = 3;
private static final int COLS = 10;
public GridLayoutEg() {
int gap = 1;
int gap2 = 2;
setBorder(BorderFactory.createEmptyBorder(gap2, gap2, gap2, gap2));
setLayout(new GridLayout(ROWS, COLS, gap, gap)); // set JPanel's layout
for (int row = 0; row < ROWS; row++) {
for (int col = 0; col < COLS; col++) {
JButton button = createSeat(row, col);
add(button); // add component w/o a 2nd parameter
}
}
}
private JButton createSeat(int row, int col) {
SeatColor seatColor = SeatColor.values()[row];
SeatAction seatAction = new SeatAction(seatColor, col);
JButton button = new JButton(seatAction);
button.setBackground(seatColor.getColor());
int topGap = 8;
int sideGap = 25;
Border innerBorder = BorderFactory.createEmptyBorder(topGap, sideGap, topGap, sideGap);
Border outerBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED, seatColor.getColor().brighter(),
seatColor.getColor().darker());
Border border = BorderFactory.createCompoundBorder(outerBorder, innerBorder);
button.setBorder(border);
return button;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
private static void createAndShowGui() {
GridLayoutEg mainPanel = new GridLayoutEg();
JFrame frame = new JFrame("GridLayoutEg");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}
class SeatAction extends AbstractAction {
private static final long serialVersionUID = 1L;
private SeatColor seatColor;
private int column;
public SeatAction(SeatColor seatColor, int column) {
super(String.format("[%d]", column));
this.seatColor = seatColor;
this.column = column;
// putValue(LARGE_ICON_KEY, createIcon(seatColor, column));
}
@Override
public void actionPerformed(ActionEvent e) {
AbstractButton btn = (AbstractButton) e.getSource();
btn.setBackground(seatColor.getColor().brighter());
setEnabled(false);
String text = String.format("Selected Seat Color: %s; Column: %d", seatColor, column);
System.out.println(text );
}
}
enum SeatColor {
GOLD("Gold", new Color(255, 215, 0)),
SILVER("Silver", new Color(192, 192, 192)),
BRONZE("Bronze", new Color(205, 127, 50));
private String text;
private Color color;
private SeatColor(String text, Color color) {
this.text = text;
this.color = color;
}
public String getText() {
return text;
}
public Color getColor() {
return color;
}
@Override
public String toString() {
return getText();
}
}
导入java.awt.Color;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入javax.swing.*;
导入javax.swing.border.BevelBorder;
导入javax.swing.border.border;
公共类GridLayoutEg扩展了JPanel{
私有静态最终长serialVersionUID=1L;
私有静态最终整数行=3;
专用静态最终整数COLS=10;
公共网格布局EG(){
int gap=1;
int-gap2=2;
setboorder(BorderFactory.createEmptyBorder(gap2,gap2,gap2,gap2));
setLayout(新的GridLayout(行、列、间隙、间隙));//设置JPanel的布局
对于(int row=0;rowcreateAndShowGui());
}
私有静态void createAndShowGui(){
GridLayoutEg主面板=新建GridLayoutEg();
JFrame=新JFrame(“GridLayoutEg”);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
添加框架(主面板);
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
}
类SeatAction扩展了AbstractAction{
私有静态最终长serialVersionUID=1L;
私人SeatColor SeatColor;
私有int列;
公共SeatAction(SeatColor SeatColor,int列){
super(String.format(“[%d]”,column));
this.seatColor=seatColor;
this.column=列;
//putValue(大图标键,createIcon(seatColor,列));
}
@凌驾
已执行的公共无效操作(ActionEvent