事实证明这比我想象的要困难得多。我想要做的就是将这个JPanel“粘贴”到框架的左侧。这是我到目前为止所拥有的。 (如果可能,我不想使用GridBagLayout(我是一个java新手)。)
labels = new JPanel();
JLabel currentWordLA = new JLabel("Current word:");
JLabel triedLettersLA = new JLabel("Tried letters:");
JLabel triesLeftLA = new JLabel("Tries remaining:");
JButton restart = new JButton("Reset");
labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
labels.add(currentWordLA);
labels.add(triedLettersLA);
labels.add(triesLeftLA);
scorePanel.add(labels, BorderLayout.WEST);
编辑:对不起伙计们,这是完整的代码。它是框架内面板中的一种面板。只是试图让框架与左边对齐。谢谢!
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Hangman {
JFrame frame;
private String[] wordList = {
"computer", "java", "activity", "alaska", "appearance", "article",
"automobile", "basket", "birthday", "canada", "central", "character",
"chicken", "chosen", "cutting", "daily", "darkness", "diagram",
"disappear", "driving", "effort", "establish", "exact",
"establishment", "fifteen", "football", "foreign", "frequently",
"frighten", "function", "gradually", "hurried", "identity",
"importance", "impossible", "invented", "italian", "journey",
"lincoln", "london", "massage", "minerals", "outer", "paint",
"particles", "personal", "physical", "progress", "quarter",
"recognise", "replace", "rhythm", "situation", "slightly",
"steady", "stepped", "strike", "successful", "sudden",
"terrible", "traffic", "unusual", "volume", "yesterday"};
private String mysteryWord;
private boolean finished = false;
private boolean won = false;
private Button a[];
public static void main(String[] args) {
Hangman gui = new Hangman();
gui.go();
}
class myDrawPanel extends JPanel {
public void paintComponent(Graphics g) {
setBackground(Color.white);
g.setColor(Color.gray);
g.fillRect(50, 200, 150, 20);
g.fillRect(90, 20, 10, 200);
g.fillRect(90, 20, 60, 10);
g.setColor(Color.black);
g.fillRect(145, 20, 5, 25);
}
}
public void go() {
frame = new JFrame("Hangman");
JPanel topPanel = new JPanel();
myDrawPanel noosePanel = new myDrawPanel();
JPanel bottomPanel = new JPanel();
JPanel scorePanel = new JPanel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(2, 0));
bottomPanel.setLayout(new GridLayout(0, 2));
scorePanel.setSize(20, 100);
noosePanel.setBorder(BorderFactory.createTitledBorder("Your progress."));
topPanel.setBorder(BorderFactory.createTitledBorder("Your arsenal."));
scorePanel.setBorder(BorderFactory.createTitledBorder("Your score."));
frame.add(topPanel);
frame.add(bottomPanel);
bottomPanel.add(scorePanel);
bottomPanel.add(noosePanel);
//The Stats section.
JPanel labels = new JPanel();
JLabel currentWordLA = new JLabel("Current word:");
JLabel triedLettersLA = new JLabel("Tried letters:");
JLabel triesLeftLA = new JLabel("Tries remaining:");
JButton restart = new JButton("Reset");
labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
labels.add(currentWordLA);
labels.add(triedLettersLA);
labels.add(triesLeftLA);
scorePanel.add(labels, BorderLayout.WEST);
int i;
StringBuffer buffer;
a = new Button[26];
topPanel.setLayout(new GridLayout(4, 0, 10, 10));
// create all 26 buttons
for (i = 0; i < 26; i++) {
buffer = new StringBuffer();
buffer.append((char) (i + 65));
a[i] = new Button(buffer.toString());
a[i].setSize(100, 100);
//a[i].addActionListener( this );
topPanel.add(a[i]);
}
frame.setSize(500, 500);
frame.setResizable(false);
frame.setVisible(true);
}
}
答案 0 :(得分:2)
尝试向BorderLayout.CENTER添加内容,如下所示:
scorepanel.add(new JPanel(), BorderLayout.CENTER); //I guess scorepanel is your frame
//your code here
答案 1 :(得分:2)
我喜欢你的布局。我对你的例子做了一些修改:
看起来MyDrawPanel
仅适用于绘图。如果您覆盖getPreferredSize
,则可以使用pack()
而不是大量调用setSize()
。在paintComponent
内,相对于小组的getWidth
和getHeight
进行绘制,然后它会适合任何大小。
我使用JLabel.LEFT
作为标签,我将背景颜色设置为灰色,以便您可以看到布局的位置。还有更多here。
如果您使用标准命名,例如MyDrawPanel
,则其他人更容易阅读您的代码。
代码:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Hangman {
JFrame frame;
private String[] wordList = {
"computer", "java", "activity", "alaska", "appearance", "article",
"automobile", "basket", "birthday", "canada", "central", "character",
"chicken", "chosen", "cutting", "daily", "darkness", "diagram",
"disappear", "driving", "effort", "establish", "exact",
"establishment", "fifteen", "football", "foreign", "frequently",
"frighten", "function", "gradually", "hurried", "identity",
"importance", "impossible", "invented", "italian", "journey",
"lincoln", "london", "massage", "minerals", "outer", "paint",
"particles", "personal", "physical", "progress", "quarter",
"recognise", "replace", "rhythm", "situation", "slightly",
"steady", "stepped", "strike", "successful", "sudden",
"terrible", "traffic", "unusual", "volume", "yesterday"};
private String mysteryWord;
private boolean finished = false;
private boolean won = false;
private Button a[];
public static void main(String[] args) {
Hangman gui = new Hangman();
gui.go();
}
class MyDrawPanel extends JPanel {
@Override
public Dimension getPreferredSize() {
return new Dimension(256, 256);
}
@Override
public void paintComponent(Graphics g) {
setBackground(Color.white);
g.setColor(Color.gray);
g.fillRect(50, 200, 150, 20);
g.fillRect(90, 20, 10, 200);
g.fillRect(90, 20, 60, 10);
g.setColor(Color.black);
g.fillRect(145, 20, 5, 25);
}
}
public void go() {
frame = new JFrame("Hangman");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(2, 0));
JPanel topPanel = new JPanel();
topPanel.setBorder(BorderFactory.createTitledBorder("Your arsenal."));
MyDrawPanel noosePanel = new MyDrawPanel();
noosePanel.setBorder(BorderFactory.createTitledBorder("Your progress."));
JPanel bottomPanel = new JPanel(new GridLayout(0, 2));
JPanel scorePanel = new JPanel(new GridLayout());
scorePanel.setBorder(BorderFactory.createTitledBorder("Your score."));
frame.add(topPanel);
frame.add(bottomPanel);
bottomPanel.add(scorePanel);
bottomPanel.add(noosePanel);
//The Stats section.
JPanel labels = new JPanel();
labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
labels.setBackground(Color.lightGray);
JLabel currentWordLA = new JLabel("Current word:", JLabel.LEFT);
JLabel triedLettersLA = new JLabel("Tried letters:", JLabel.LEFT);
JLabel triesLeftLA = new JLabel("Tries remaining:", JLabel.LEFT);
labels.add(currentWordLA);
labels.add(triedLettersLA);
labels.add(triesLeftLA);
scorePanel.add(labels);
int i;
StringBuffer buffer;
a = new Button[26];
topPanel.setLayout(new GridLayout(4, 0, 10, 10));
// create all 26 buttons
for (i = 0; i < 26; i++) {
buffer = new StringBuffer();
buffer.append((char) (i + 65));
a[i] = new Button(buffer.toString());
//a[i].addActionListener( this );
topPanel.add(a[i]);
}
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}