如何将 JButton 放置在 JPanel 上的特定 x - y 点
How to place a JButton at a specific x - y point on a JPanel
通用代码:以下问题将参考某些 类
public class Board extends JPanel {
public Board() {
BoardMethods a = new BoardMethods();//BoardMethods handles logic
a.printBoard(getBoard());//irrelevant to question, helps determine winner
JPanel panelLORDY = new JPanel(new FlowLayout());
//JButton alphaButton = new JButton("Hi");
//alphaButton.setBounds(213,131,100,100);
//add(alphaButton);
}
public int[][] getBoard(){
return boardEvalMatrix;
}
public void paintComponent(Graphics g){
g.setColor(Color.BLUE);
g.fillRect(0, 0, 1456, 916);
Graphics2D newG = (Graphics2D) g;
newG.setStroke(new BasicStroke(15));
g.setColor(Color.YELLOW);
for(int a = 0; a < 6; a++)//rows for board --- rowHeight is 127
g.drawRect(128, 68 + (a*127), 1200, 127);
g.setColor(Color.BLACK);
newG.setStroke(new BasicStroke(8));
for(int a = 0; a < 6; a++)//columns for board --- columnWidth is 171
g.drawRect(128 + (a*171), 68, 171, 764);
for(int a = 0; a < 6; a++)//give rows black line in middle
g.drawRect(128, 68 + (a*127), 1200, 127);
//g.drawString("H", 213, 131); center point
//g.drawLine(50,0, 1456, 916); //width 1456 length 916 - school computer monitors
JButton alphaButton = new JButton("Hi");
alphaButton.setBounds(213,131,100,100);
bored.add(alphaButton);
}
}
public class gameBoard extends JPanel {
private Board bored;
private RoundButton[][] buttonArray;//holds all roundButtons on board
private JPanel resetPanel, quitPanel;
public gameBoard() {
setLayout(new BorderLayout());
buttonArray = new RoundButton[6][7];
for(int a = 0; a < buttonArray.length; a++)
for(int b = 0; b < buttonArray[0].length; b++)
bored = new Board();
add(bored, BorderLayout.CENTER);
resetPanel = new JPanel();
resetPanel.setLayout(new FlowLayout());
this.add(resetPanel, BorderLayout.NORTH);
quitPanel = new JPanel();
quitPanel.setLayout(new FlowLayout());
this.add(quitPanel, BorderLayout.SOUTH);
JButton resetButton = new JButton("Reset");
resetButton.addActionListener(new resetListener());
resetPanel.add(resetButton);//resets board
JButton quitButton = new JButton("Quit");
quitButton.addActionListener(new quitListener());
quitPanel.add(quitButton);
//JButton alphaButton = new JButton("Hi");
//alphaButton.setBounds(213,131,100,100);
//bored.add(alphaButton);
}
}
问题 1:
我发现这个 question 关于如何在特定位置放置 JButton
,但是,我有循环出现 JButton
,我需要 JButton
以某个点为中心,在本例中为 213,131
。我正在使用 setBounds(int x, int y, int width, int height)
方法放置 JButton
。有没有办法让 JButton
以上面提到的坐标为中心,或者我必须玩数字才能把它放在我想要的地方?在上面的两个 classes 中都可以找到这一行,因为我正在测试某些东西并发现 ISSUE 2.
中描述的问题
JButton alphaButton = new JButton("Hi");
alphaButton.setBounds(213,131,100,100);
add(alphaButton);
问题 2:
如果您查看 class Board
,在 paintComponent
方法中我使用 setBounds()
方法放置我的 JButton
。当在正确位置的左上角调用 paintComponent()
方法时,这会起作用并在 JPanel
上放置一个我认为正确尺寸的按钮。然而,当屏幕刷新时,paintComponent()
又被调用了,按钮的数量不断增加,好好玩,但不是我想要的。但是,当我将 setBounds
方法和 alphaButton
移动到 Board
的 paintComponent()
方法之外的任何位置时,即将其放入 class 中 Board
被绘制在 Board
构造函数内部,JButton
传播问题停止,但是,JButton
不再将自身置于正确的坐标点并丢失我给出的尺寸它。我该如何解决这个问题?
P.S. 您会多次看到 setBounds
方法。在真实代码中,setBounds
方法和调用它的JButton
一次只存在于一个class中,我在这里多次输入以显示我放置它的位置。
永远不要使用 setBounds()
,坚持使用布局管理器。
FlowLayout
将自动将您的组件居中。更好的是使用 BorderLayout
,并设置为 CENTER
.
通用代码:以下问题将参考某些 类
public class Board extends JPanel {
public Board() {
BoardMethods a = new BoardMethods();//BoardMethods handles logic
a.printBoard(getBoard());//irrelevant to question, helps determine winner
JPanel panelLORDY = new JPanel(new FlowLayout());
//JButton alphaButton = new JButton("Hi");
//alphaButton.setBounds(213,131,100,100);
//add(alphaButton);
}
public int[][] getBoard(){
return boardEvalMatrix;
}
public void paintComponent(Graphics g){
g.setColor(Color.BLUE);
g.fillRect(0, 0, 1456, 916);
Graphics2D newG = (Graphics2D) g;
newG.setStroke(new BasicStroke(15));
g.setColor(Color.YELLOW);
for(int a = 0; a < 6; a++)//rows for board --- rowHeight is 127
g.drawRect(128, 68 + (a*127), 1200, 127);
g.setColor(Color.BLACK);
newG.setStroke(new BasicStroke(8));
for(int a = 0; a < 6; a++)//columns for board --- columnWidth is 171
g.drawRect(128 + (a*171), 68, 171, 764);
for(int a = 0; a < 6; a++)//give rows black line in middle
g.drawRect(128, 68 + (a*127), 1200, 127);
//g.drawString("H", 213, 131); center point
//g.drawLine(50,0, 1456, 916); //width 1456 length 916 - school computer monitors
JButton alphaButton = new JButton("Hi");
alphaButton.setBounds(213,131,100,100);
bored.add(alphaButton);
}
}
public class gameBoard extends JPanel {
private Board bored;
private RoundButton[][] buttonArray;//holds all roundButtons on board
private JPanel resetPanel, quitPanel;
public gameBoard() {
setLayout(new BorderLayout());
buttonArray = new RoundButton[6][7];
for(int a = 0; a < buttonArray.length; a++)
for(int b = 0; b < buttonArray[0].length; b++)
bored = new Board();
add(bored, BorderLayout.CENTER);
resetPanel = new JPanel();
resetPanel.setLayout(new FlowLayout());
this.add(resetPanel, BorderLayout.NORTH);
quitPanel = new JPanel();
quitPanel.setLayout(new FlowLayout());
this.add(quitPanel, BorderLayout.SOUTH);
JButton resetButton = new JButton("Reset");
resetButton.addActionListener(new resetListener());
resetPanel.add(resetButton);//resets board
JButton quitButton = new JButton("Quit");
quitButton.addActionListener(new quitListener());
quitPanel.add(quitButton);
//JButton alphaButton = new JButton("Hi");
//alphaButton.setBounds(213,131,100,100);
//bored.add(alphaButton);
}
}
问题 1:
我发现这个 question 关于如何在特定位置放置 JButton
,但是,我有循环出现 JButton
,我需要 JButton
以某个点为中心,在本例中为 213,131
。我正在使用 setBounds(int x, int y, int width, int height)
方法放置 JButton
。有没有办法让 JButton
以上面提到的坐标为中心,或者我必须玩数字才能把它放在我想要的地方?在上面的两个 classes 中都可以找到这一行,因为我正在测试某些东西并发现 ISSUE 2.
JButton alphaButton = new JButton("Hi");
alphaButton.setBounds(213,131,100,100);
add(alphaButton);
问题 2:
如果您查看 class Board
,在 paintComponent
方法中我使用 setBounds()
方法放置我的 JButton
。当在正确位置的左上角调用 paintComponent()
方法时,这会起作用并在 JPanel
上放置一个我认为正确尺寸的按钮。然而,当屏幕刷新时,paintComponent()
又被调用了,按钮的数量不断增加,好好玩,但不是我想要的。但是,当我将 setBounds
方法和 alphaButton
移动到 Board
的 paintComponent()
方法之外的任何位置时,即将其放入 class 中 Board
被绘制在 Board
构造函数内部,JButton
传播问题停止,但是,JButton
不再将自身置于正确的坐标点并丢失我给出的尺寸它。我该如何解决这个问题?
P.S. 您会多次看到 setBounds
方法。在真实代码中,setBounds
方法和调用它的JButton
一次只存在于一个class中,我在这里多次输入以显示我放置它的位置。
永远不要使用 setBounds()
,坚持使用布局管理器。
FlowLayout
将自动将您的组件居中。更好的是使用 BorderLayout
,并设置为 CENTER
.