Java GridLayout顶部的FlowLayout不工作
我正在尝试创建一个刽子手游戏,到目前为止进展顺利,但布局设计似乎不到位!字母表应该以Java GridLayout顶部的FlowLayout不工作,java,swing,jframe,jpanel,layout-manager,Java,Swing,Jframe,Jpanel,Layout Manager,我正在尝试创建一个刽子手游戏,到目前为止进展顺利,但布局设计似乎不到位!字母表应该以FlowLayout顺序结束在刽子手图片的顶部,按钮“重启”、“帮助”、“添加新词”和“退出”在底部!我做错了什么 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; public class Hangman extends JFrame { int i = 0; static J
FlowLayout
顺序结束在刽子手图片的顶部,按钮“重启”、“帮助”、“添加新词”和“退出”在底部!我做错了什么
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);
}
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.io.*;
公共类刽子手扩展JFrame
{
int i=0;
静态JPanel面板;
静态JPanel面板2;
静态JPanel面板3;
公众刽子手()
{
JButton[]按钮=新JButton[26];
panel=newjpanel(newflowlayout());
panel2=新的JPanel();
panel3=新的JPanel();
JButton btnRestart=新JButton(“重启”);
btnRestart.addActionListener(新的ActionListener(){
已执行的公共无效操作(操作事件e)
{
}
});
JButton btnNewWord=新JButton(“添加新单词”);
btnNewWord.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e)
{
尝试
{
FileWriter fw=新的FileWriter(“Words.txt”,true);
PrintWriter pw=新的PrintWriter(fw,真);
String word=JOptionPane.showInputDialog(“请输入一个单词:”);
println(word);
关闭();
}
捕获(IOIE)
{
System.out.println(“抛出错误”+ie.getMessage());
}
}
});
JButton btnHelp=新JButton(“帮助”);
btnHelp.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e)
{
String message=“要猜测的单词由一行表示”
+破折号,给出字母的数量和类别
+“单词。\n如果猜玩家建议使用字母”
+出现在单词中,由另一个玩家编写
+“在所有正确的位置。\n如果建议”
+字母不出现在单词中,其他玩家
+“绘制绞刑图的一个元素作为理货标记。”
+“\n”
+“\n游戏结束时:”
+\n猜谜玩家完成单词,或猜谜
+“整个词都正确”
+“\n另一个播放机完成图表”;
showMessageDialog(空,消息,“帮助”,JOptionPane.INFORMATION\u消息);
}
});
JButton btnExit=新JButton(“退出”);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e)
{
系统出口(0);
}
});
ImageIcon图标=新的ImageIcon(“D:\\Varsity College\\Prog212Assign1_10-013803\\images\\Hangman1.jpg”);
JLabel标签=新的JLabel();
label.setIcon(图标);
字符串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”};
对于(i=0;i
以下是一些建议:
- 对顶部面板使用
;在这种情况下,零表示行数由布局中指定的列数和组件总数决定:网格布局
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]); }
main
方法更改为此。。。(基本上使用BoxLayout作为主容器)
“我做错了什么?”嗯。。嗯,除了拼写不严,这使事情更难理解。1) 在代码段中嵌入图像引用,使其不会出现。2) 不检查问题是否如您所期望的那样出现在预览中(消息发布表单的正下方)。OTOH,1)可运行代码,和2)屏幕截图+1):这可能更适合。也可以考虑<代码> jPanel面板=新jPanel(新GRIDWORD(0, 9))< /代码>。
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);
}
});
public static void main(String[] args)
{
TempProject frame = new TempProject();
Box mainPanel = Box.createVerticalBox();
frame.setContentPane(mainPanel);
mainPanel.add(panel);
mainPanel.add(panel2);
mainPanel.add(panel3);
frame.pack();
frame.setVisible(true);
}