Java 在按钮的相对位置添加JLabel
好的,这是我到目前为止的相关代码Java 在按钮的相对位置添加JLabel,java,swing,jbutton,jlabel,layout-manager,Java,Swing,Jbutton,Jlabel,Layout Manager,好的,这是我到目前为止的相关代码 for (int i = gameLines - 1; i > 0; i--) { for (int j = 0; j < i; j++) { JButton jButton = new JButton(); jButton.setSize(buttonWidth, buttonHeight); jButton.setText("" + line[i].charAt(j));
for (int i = gameLines - 1; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
JButton jButton = new JButton();
jButton.setSize(buttonWidth, buttonHeight);
jButton.setText("" + line[i].charAt(j));
int x = ((buttonWidth / 2 * gameLines + 1) - (buttonWidth / 2 * i) + (buttonWidth * j));
int y = (gameLines - (i + 1)) * buttonHeight;
jButton.setLocation(x, y);
panel.add(jButton);
button[i][j] = jButton;
button[i][j].setActionCommand(Integer.toString(i) + "." + Integer.toString(j));
button[i][j].addActionListener(this);
}
}
for(inti=gameLines-1;i>0;i--)
{
对于(int j=0;j
代码创建并将我的所有按钮放置在我想要的位置。我花了一段时间才弄明白。我最初是一名AppleSoft BASIC程序员,我对I&j变量名感到抱歉
现在开始玩吧。在底部3行按钮的右侧,我想放置一个jLabel。jLabel的右边缘与顶行最右侧按钮的右边缘对齐。每个文本将右对齐,以:和最多4位数字结尾
我想我可以像计算按钮位置一样简单地计算位置。我将根据开关/案例添加文本
我在理解JLabels时遇到了困难,因此我非常感谢能得到的任何帮助
我目前的想法是:在j循环之后插入
if (i < 4)
{
JLabel jLable = new JLabel();
JLabel.setSize(???, buttonHeight);
Calculate value of X;
int y = (gameLines - (i +1)) * buttonHeight;
jLabel.setLocation(x,y);
switch (i)
{
case 3:
jLabel.setText("Buttons Clicked: " + buttonsClicked);
break;
case 2:
etc.
}
panel.add(jLabel);
}
if(i<4)
{
JLabel jLable=新的JLabel();
JLabel.setSize(???,按钮右键);
计算X值;
int y=(游戏线-(i+1))*按钮的高度;
jLabel.设定位置(x,y);
开关(一)
{
案例3:
jLabel.setText(“单击按钮:“+单击按钮”);
打破
案例2:
等
}
面板。添加(jLabel);
}
请帮忙出于种种原因,我会避免绝对布局。当您在其他PC上运行它时,整个过程就开始崩溃,相反,您应该依赖Swing中可用的布局管理器API 以下示例使用复合布局方法。每一行都是它自己的容器(
JPanel
),然后每一行都被添加到主面板中
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class ButtonPyramid {
public static void main(String[] args) {
new ButtonPyramid();
}
public ButtonPyramid() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private String[] lines;
public TestPane() {
lines = new String[]{
"AAFITQPNXBE",
"?AXOPKMSUR",
"TGKFREUDI",
"DFEAAEOY",
"ZDE?VIF",
"G@RMLC",
"YUJGO",
"NSCP",
"KO@",
"MI",
"Y",
"B",
};
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.gridy = 1;
gbc.gridx = 0;
for (String line : lines) {
JPanel panel = new JPanel(new GridBagLayout());
for (char ch : line.toCharArray()) {
JButton btn = new JButton(Character.toString(ch));
btn.setMargin(new Insets(10, 10, 10, 10));
panel.add(btn);
}
add(panel, gbc);
gbc.gridy++;
}
JLabel label = new JLabel(":1234");
gbc.gridy -= 3;
gbc.gridx++;
gbc.anchor = GridBagConstraints.NORTH;
add(label, gbc);
}
}
}
如果您希望文本不占用另一列,可以尝试一个小技巧,将标签布局约束改为如下所示
JLabel label = new JLabel(":1234");
gbc.gridy -= 3;
gbc.anchor = GridBagConstraints.NORTHEAST;
add(label, gbc);
查看想法和细节
lines = new char[][]{...};
for (int outter = 0; outter < lines.length; outter++) {
JPanel panel = new JPanel(new GridBagLayout());
for (int inner = 0; inner < lines[outter].length) {
char ch = lines[outter][inner];
JButton btn = new JButton(Character.toString(ch));
btn.setMargin(new Insets(10, 10, 10, 10));
panel.add(btn);
}
add(panel, gbc);
gbc.gridy++;
}
lines=newchar[][]{…};
对于(int-outter=0;outter
出于种种原因,我会避免绝对布局。当您在其他PC上运行它时,整个过程就开始崩溃,相反,您应该依赖Swing中可用的布局管理器API
以下示例使用复合布局方法。每一行都是它自己的容器(JPanel
),然后每一行都被添加到主面板中
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class ButtonPyramid {
public static void main(String[] args) {
new ButtonPyramid();
}
public ButtonPyramid() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private String[] lines;
public TestPane() {
lines = new String[]{
"AAFITQPNXBE",
"?AXOPKMSUR",
"TGKFREUDI",
"DFEAAEOY",
"ZDE?VIF",
"G@RMLC",
"YUJGO",
"NSCP",
"KO@",
"MI",
"Y",
"B",
};
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.gridy = 1;
gbc.gridx = 0;
for (String line : lines) {
JPanel panel = new JPanel(new GridBagLayout());
for (char ch : line.toCharArray()) {
JButton btn = new JButton(Character.toString(ch));
btn.setMargin(new Insets(10, 10, 10, 10));
panel.add(btn);
}
add(panel, gbc);
gbc.gridy++;
}
JLabel label = new JLabel(":1234");
gbc.gridy -= 3;
gbc.gridx++;
gbc.anchor = GridBagConstraints.NORTH;
add(label, gbc);
}
}
}
如果您希望文本不占用另一列,可以尝试一个小技巧,将标签布局约束改为如下所示
JLabel label = new JLabel(":1234");
gbc.gridy -= 3;
gbc.anchor = GridBagConstraints.NORTHEAST;
add(label, gbc);
查看想法和细节
lines = new char[][]{...};
for (int outter = 0; outter < lines.length; outter++) {
JPanel panel = new JPanel(new GridBagLayout());
for (int inner = 0; inner < lines[outter].length) {
char ch = lines[outter][inner];
JButton btn = new JButton(Character.toString(ch));
btn.setMargin(new Insets(10, 10, 10, 10));
panel.add(btn);
}
add(panel, gbc);
gbc.gridy++;
}
lines=newchar[][]{…};
对于(int-outter=0;outter
您是否有当前布局的屏幕截图?我打算将Submit按钮移到另一侧,以便为JLabels腾出空间您有当前布局的屏幕截图吗?我打算将Submit按钮移到另一侧,以便为jLabelsIs腾出空间,您的键盘是什么样子的?难怪你这么快回答问题。你来自另一个世界;)@peeskillet不,我只是把头撞在键盘上,直到有东西起作用;)基于gameLines变量,我的是动态的。您的JLabel缺少“Buttons Clicked:”部分,我的目标是将其放在最上面一行的按钮下。@karl记住,这只是一个示例,我没有您的完整代码可供使用,这无助于您以什么方式实现这一点?“在底部3行按钮的右侧,我想放置一个jLabel。”和“以a:结尾,最多4位数字”是我所要做的一切…@MadProgrammer我希望我在这里听起来不是忘恩负义,但我确实声明了“现在开始玩吧。在底部3行按钮的右侧,我想放置一个jLabel。jLabel的右边缘与顶行最右侧按钮的右边缘对齐。每个注释中的文本将右对齐,以:和最多4位数字结尾。“-从原始注释复制/粘贴。”单击的按钮:1234,可能是最短的文本,但其他文本的理论也一样。你的键盘是这样的吗?难怪你这么快回答问题。你来自另一个世界;)@peeskillet不,我只是把头撞在键盘上,直到有东西起作用;)基于gameLines变量,我的是动态的。您的JLabel缺少“单击的按钮:”部分,我的目标是将其取消