我正在尝试为Tic tac脚趾制作界面。我在我的9个字段中使用JLabels方法。程序中没有错误,但有一些我不知道该怎么做。请阅读以下我的问题&请给我建议
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
public class ticTac extends JFrame
{
static JLabel label0 = new JLabel();
static JLabel label1 = new JLabel();
static JLabel label2 = new JLabel();
static JLabel label3 = new JLabel();
static JLabel label4 = new JLabel();
static JLabel label5 = new JLabel();
static JLabel label6 = new JLabel();
static JLabel label7 = new JLabel();
static JLabel label8 = new JLabel();
static JLabel[] choiceLabel = new JLabel[9];
static ImageIcon burger = new ImageIcon("Cross.jpg");
public static void main(String []args)
{
new ticTac().show();
}
public ticTac()
{
setVisible(true);
setSize(450,450);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new GridBagLayout());
GridBagConstraints myGrid = new GridBagConstraints();
GridBagConstraints gridConstraints;
choiceLabel[0] = label0;
choiceLabel[1] = label1;
choiceLabel[2] = label2;
choiceLabel[3] = label3;
choiceLabel[4] = label4;
choiceLabel[5] = label5;
choiceLabel[6] = label6;
choiceLabel[7] = label7;
choiceLabel[8] = label8;
此方法在水平行中将标签从1到9绘制,所以我不希望这样,我希望我的程序将在一行中绘制三个框,在第二行和三个框中绘制三个框。请帮助我。
for (int i = 0; i < 9; i++)
{
gridConstraints = new GridBagConstraints();
choiceLabel[i].setPreferredSize(new Dimension(burger.getIconWidth(), burger.getIconHeight()));
choiceLabel[i].setOpaque(true);
choiceLabel[i].setBackground(Color.RED);
gridConstraints.gridx = i;
gridConstraints.gridy = 0;
gridConstraints.insets = new Insets(10, 10, 10, 10);
getContentPane().add(choiceLabel[i], gridConstraints);
pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds((int) (0.5 * (screenSize.width - getWidth())), (int) (0.5 * (screenSize.height - getHeight())), getWidth(), getHeight());
}
}
}
答案 0 :(得分:3)
您可以使用GridLayout
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import static tictactoe.TicTacToe.choiceLabel;
public class LayoutTicTacToe {
public static void main(String[] args) {
new LayoutTicTacToe();
}
public LayoutTicTacToe() {
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 GridLayout(3, 3, 10, 10));
choiceLabel[0] = new JLabel("_");
choiceLabel[1] = new JLabel("_");
choiceLabel[2] = new JLabel("_");
choiceLabel[3] = new JLabel("_");
choiceLabel[4] = new JLabel("_");
choiceLabel[5] = new JLabel("_");
choiceLabel[6] = new JLabel("_");
choiceLabel[7] = new JLabel("_");
choiceLabel[8] = new JLabel("_");
for (int i = 0; i < 9; i++) {
choiceLabel[i].setText("_");
choiceLabel[i].setHorizontalAlignment(JLabel.CENTER);
choiceLabel[i].setVerticalAlignment(JLabel.CENTER);
choiceLabel[i].setOpaque(true);
choiceLabel[i].setBackground(Color.RED);
frame.add(choiceLabel[i]);
}
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
或者,如果你真的被GridBagLayout
...
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import static tictactoe.TicTacToe.choiceLabel;
public class LayoutTicTacToe {
public static void main(String[] args) {
new LayoutTicTacToe();
}
public LayoutTicTacToe() {
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 GridBagLayout());
choiceLabel[0] = new JLabel("_");
choiceLabel[1] = new JLabel("_");
choiceLabel[2] = new JLabel("_");
choiceLabel[3] = new JLabel("_");
choiceLabel[4] = new JLabel("_");
choiceLabel[5] = new JLabel("_");
choiceLabel[6] = new JLabel("_");
choiceLabel[7] = new JLabel("_");
choiceLabel[8] = new JLabel("_");
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 10, 10);
int col = 0;
int row = 0;
for (int i = 0; i < 9; i++) {
gbc.gridx = col;
gbc.gridy = row;
choiceLabel[i].setText("_");
choiceLabel[i].setHorizontalAlignment(JLabel.CENTER);
choiceLabel[i].setVerticalAlignment(JLabel.CENTER);
choiceLabel[i].setOpaque(true);
choiceLabel[i].setBackground(Color.RED);
frame.add(choiceLabel[i], gbc);
col++;
if (col > 2) {
col = 0;
row++;
}
}
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
通过反馈进行更新
只是一些友好的反馈...
JFrame
,你没有添加任何重要的功能。最好使用JPanel
,然后将其添加到JFrame
的实例中。如果不出意外,您现在可以选择将其添加到您喜欢的任何其他容器中。JFrame#getContentPane
(除非您使用的是Java 1.4或更低版本),setLayout
和add
(在其他一组中)被映射为直接使用getContentPane
。setLocationRelativeTo(null)
。它使用起来更简单。如果可以的话,尽量避免使用setBounds
。