gpt4 book ai didi

java - GridLayout 之上的 FlowLayout 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:33 41 4
gpt4 key购买 nike

我正在尝试创建一个刽子手游戏,到目前为止它进展顺利,但布局设计似乎并没有落到实处!字母表应该以 FlowLayout 顺序结束在 Hangman 图片的顶部,底部有按钮“Restart”、“Help”、“Add New Word”和“Exit”!我做错了什么?

hangman

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Hangman extends JFrame
{
int i = 0;
static JPanel panel;
static JPanel panel2;
static JPanel panel3;

public Hangman()
{
JButton[] buttons = new JButton[26];

panel = new JPanel(new FlowLayout());
panel2 = new JPanel();
panel3 = new JPanel();

JButton btnRestart = new JButton("Restart");
btnRestart.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{

}
});

JButton btnNewWord = new JButton("Add New Word");
btnNewWord.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
try
{
FileWriter fw = new FileWriter("Words.txt", true);
PrintWriter pw = new PrintWriter(fw, true);

String word = JOptionPane.showInputDialog("Please enter a word: ");

pw.println(word);
pw.close();
}
catch(IOException ie)
{
System.out.println("Error Thrown" + ie.getMessage());
}
}
});

JButton btnHelp = new JButton("Help");
btnHelp.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
String message = "The word to guess is represented by a row "
+ "of dashes, giving the number of letters and category of "
+ "the word. \nIf the guessing player suggests a letter "
+ "which occurs in the word, the other player writes it "
+ "in all its correct positions. \nIf the suggested "
+ "letter does not occur in the word, the other player "
+ "draws one element of the hangman diagram as a tally mark."
+ "\n"
+ "\nThe game is over when:"
+ "\nThe guessing player completes the word, or guesses "
+ "the whole word correctly"
+ "\nThe other player completes the diagram";
JOptionPane.showMessageDialog(null,message, "Help",JOptionPane.INFORMATION_MESSAGE);
}
});

JButton btnExit = new JButton("Exit");
btnExit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});

ImageIcon icon = new ImageIcon("D:\\Varsity College\\Prog212Assign1_10-013803\\images\\Hangman1.jpg");
JLabel label = new JLabel();
label.setIcon(icon);
String b[]= {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
for(i = 0; i < buttons.length; i++)
{
buttons[i] = new JButton(b[i]);

panel.add(buttons[i]);
}
panel2.add(label);

panel3.add(btnRestart);
panel3.add(btnNewWord);
panel3.add(btnHelp);
panel3.add(btnExit);
}

public static void main(String[] args)
{
Hangman frame = new Hangman();
frame.add(panel, BorderLayout.NORTH);
frame.add(panel2, BorderLayout.CENTER);
frame.add(panel3, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}

最佳答案

这里有一些建议:

enter image description here

  • 为顶部面板使用 GridLayout;在这种情况下,零表示行数由指定的列数和布局中的组件总数决定:

    JPanel north = new JPanel(new GridLayout(0, 9));
  • 这里概述了如何使中心面板具有合理的初始尺寸;注意如何相对于当前大小绘制:

    JPanel center = new JPanel() {

    private static final int N = 256;
    private static final String S = "Todo...";

    @Override
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    int dx = (getWidth() - g.getFontMetrics().stringWidth(S)) / 2;
    int dy = getHeight() / 2;
    g.drawString(S, dx, dy);
    }

    @Override
    public Dimension getPreferredSize() {
    return new Dimension(N, N);
    }
    };
  • 您可以像这样构造您的按钮名称:

    for (int i = 0; i < 26; i++) {
    String letter = String.valueOf((char) (i + 'A'));
    buttons[i] = new JButton(letter);
    north.add(buttons[i]);
    }
  • 制作面板 instance variables并从 event dispatch thread 开始:

    EventQueue.invokeLater(new Runnable() {

    @Override
    public void run() {
    Hangman frame = new Hangman();
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.add(frame.north, BorderLayout.NORTH);
    frame.add(frame.center, BorderLayout.CENTER);
    frame.add(frame.south, BorderLayout.SOUTH);
    frame.pack();
    frame.setLocationByPlatform(true);
    frame.setVisible(true);
    }
    });

关于java - GridLayout 之上的 FlowLayout 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12023334/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com